10
votes

Bash: / bin / ls: liste d'arguments trop longue

Je dois faire une liste d'un grand nombre de fichiers (40 000 fichiers) comme ci-dessous: xxx

ma commande est: ls err * _1 _ *. FastQ | SED ' S / \. FastQ // G '| Trier -n> Masterlist Toutefois, l'erreur est la suivante: Bash: / bin / ls: liste d'arguments trop longue

Cependant puis-je résoudre ce problème? Tout autre moyen de faire une liste comme celle-ci par Perl / Python?

thx


0 commentaires

4 Réponses :


16
votes

Vous devriez être capable de remplacer ls err * _1 _ *. FastQ avec trouver. -Name "Err * _1 _ *. FASTQ" .
De cette façon, vous pouvez éviter que la carte générique se développe dans une énorme liste d'arguments.

(la sortie trouver inclure un "code/", par exemple. ./ err001268_1_100.fastq . Si C'est indésirable, vous pouvez vous en débarrasser avec une autre commande SED plus tard dans le Pipeline.)


0 commentaires

1
votes

Si les fichiers existent déjà tous dans votre répertoire, le module "GLOB" de Python pourrait avoir une limite supérieure à la ligne de commande de Bash.

de la ligne de commande: p>

trimmedfiles.sort(key=lambda f: int(f.split("_")[2]))


1 commentaires

Vous voulez probablement un '\ N'.Join (...) autour de l'appel global. Sinon, cette réponse m'a sorti d'une situation similaire, +1



0
votes

Recherche pourrait vous aider - plutôt que LS utilise trouver. -Name 'YourPatternHere' -Print0 | Xargs -0 YouractionPere


0 commentaires

0
votes

Vous pouvez utiliser trouver .

exemple: xxx


0 commentaires