2016-04-05 15 views
0

Also, ich muss eine Reihe von Dateien in umgekehrter Reihenfolge aus einem bestimmten Verzeichnis auflisten. Das einzige Problem ist, dass es viele Dateien im Verzeichnis gibt (da ich Videoframes in einem Verzeichnis dekompiliere, um das gesamte Video umzukehren) und wenn ich ls starte, bekomme ich einen Fehler, der /bin/ls argument list too long lautet. Ich habe mich gefragt, wie ich diesen Fehler umgehen kann?Bypass ls Argument Grenze

Betriebssystem: Ubuntu 14.04

Antwort

1

Wenn ls nicht tun, find -type f ist in der Regel Ihr Freund (und auch Sachen wie -print0 um Probleme zu vermeiden exotische Dateinamen verwenden kann).

+0

ja, 'finden ...' mit '| xargs commands_to_execute {} '...' man xargs' für weitere Details. ... ODER die '-exec'-Option zum' finden'. Viel Glück für jeden. – shellter

+0

'xargs' ... nur wenn du es nicht mit einem' -exec ... {} \; 'oder' -exec .. {} \ + 'natürlich machen kannst :) – Wrikken

+1

BTW, als deine sprechenden Bilder (I würde einen Umrechner suchen, der nur rückwärts laufen kann, aber das ist nebensächlich), vergiss nicht, irgendwelche Namensübereinstimmungen zu zitieren (also, 'find -name * .jpg' würde dir immer noch Probleme bereiten, benutze' find -name '* .jpg'' stattdessen). – Wrikken

1

Ich gehe davon aus, dass Sie so etwas wie

ls -1 -r *.jpg 

zu produzieren die Umkehr sortierte Liste der Bilder verwenden. Da Bash Dateinamenerweiterungen (aka globs) selbst sortiert, können Sie den gleichen Effekt erzielen, indem Sie einfach die Erweiterung *.jpg umkehren. Dies ist eine Möglichkeit, es zu tun:

printf '%s\n' *.jpg | tac 

Wenn Sie nicht tac bekommen haben, können Sie alles in reiner Bash tun können:

images=(*.jpg) 
for ((i=${#images[*]}-1 ; i>=0 ; i--)) ; do 
    printf '%s\n' "${images[i]}" 
done