bash: /bin/ls: Argument list too long
Ich brauche, um eine Liste mit einer großen Anzahl von Dateien (rund 40.000 Dateien) wie unten:
ERR001268_1_100.fastq ERR001268_2_156.fastq ERR001753_2_78.fastq
ERR001268_1_101.fastq ERR001268_2_157.fastq ERR001753_2_79.fastq
ERR001268_1_102.fastq ERR001268_2_158.fastq ERR001753_2_7.fastq
ERR001268_1_103.fastq ERR001268_2_159.fastq ERR001753_2_80.fastq
mein Befehl ist: ls ERR*_1_*.fastq |sed 's/\.fastq//g'|sort -n > masterlist
Aber Fehler ist: bash: /bin/ls: Argument list too long
Jedoch kann ich dieses problem lösen?
Jeder andere Weg, um Liste wie diese von perl/python?
thx
InformationsquelleAutor LookIntoEast | 2011-08-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, Sie zu ersetzen
ls ERR*_1_*.fastq
mitfind . -name "ERR*_1_*.fastq"
.Auf diese Weise können Sie vermeiden, dass der wildcard-Expansion in eine riesige Liste von Argumenten.
(Die
find
Ausgabe enthalten ein führendes "./", z.B../ERR001268_1_100.fastq
. Wenndas ist unerwünscht, können Sie es loswerden mit einem anderen
sed
Befehl später in diepipeline.)
InformationsquelleAutor Jim Lewis
Wenn die Dateien bereits existieren in Ihrem Verzeichnis python ' s "glob" - Modul könnte eine höhere Grenze als bash-Befehlszeile.
Aus der Befehlszeile:
Tun, das ganze in python, die Sie könnten versuchen, so etwas wie dieses:
Dieser Lösung werden die Dateien Sortieren alphabetisch und nicht numerisch. Für die, die Sie wollen, fügen Sie einige key=lambda Magie, um die sort () - Methode:
'\n'.join(...)
rund um den glob-Aufruf. Ansonsten, diese Antwort hat mich aus einer ähnlichen situation, +1InformationsquelleAutor Ben G.
Finden, die Ihnen helfen könnte - dann lieber ls verwenden
find . -name 'yourpatternhere' -print0 | xargs -0 youractionhere
InformationsquelleAutor j03m