2013-06-29 13 views
12

Ich mag würde folgendes auszuführen:Liste Dateien passende Muster, wenn zu viele für bash Globbing

ls /path/to/files/pattern* 

und bekommen

/path/to/files/pattern1 
/path/to/files/pattern2 
/path/to/files/pattern3 

Allerdings gibt es zu viele Dateien passend zu dem Muster, dass Verzeichnis, und ich bekomme

bash: /bin/ls: Argument list too long 

Was ist ein besserer Weg, dies zu tun? Vielleicht mit dem Befehl find? Ich muss die vollständigen Pfade zu den Dateien ausdrucken.

+1

Haben Sie 'find/path/to/files -name 'pattern *''? –

+0

mögliches Duplikat von [Argumentliste zu lang, Fehler für Befehle rm, cp, mv] (http://stackoverflow.com/questions/11289551/argument-list-tool-long-error-for-rm-cp-mv-commands) –

Antwort

22

Hier hilft find in Kombination mit xargs.

find /path/to/files -name "pattern*" -print0 | xargs -0 ls 

Hinweis von Kommentaren:xargs wird helfen, wenn Sie mit der Liste tun möchten, wenn Sie es von find erhalten haben. Wenn Sie nur die Dateien auflisten möchten, sollte find ausreichen. Wenn Sie jedoch copy, delete oder eine Aktion in der Liste ausführen möchten, hilft die Verwendung von xargs anstelle von -exec.

+0

Eigentlich finde/path/to/files -name "pattern *" scheint genau das zu tun, was ich will - irgendeinen Grund, das nicht zu benutzen? Vielen Dank! – DavidR

+0

Nun, nur wenn Sie etwas tun möchten, sobald Sie eine Liste erhalten haben. Zum Beispiel kopieren Sie sie woanders oder löschen Sie sie. In solchen Fällen hilft 'Xargs'. Wenn du sie nur auflisten willst, dann brauchst du keine 'xargs' dafür. –

+0

Großartig - Ich benutze diesen Befehl tatsächlich, um in GNU parallel zu pipen, die ich anstelle von Xargs verwende. [Keine Notwendigkeit für die -print0 in diesem Fall.] – DavidR