2013-06-29 10 views
12

mi piacerebbe eseguire il seguente:Elenca i file pattern matching quando troppi per bash globbing

ls /path/to/files/pattern* 

e ottenere

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

Tuttavia, ci sono troppi file che corrispondono al modello in quel directory, e ottengo

bash: /bin/ls: Argument list too long 

Qual è un modo migliore per farlo? Forse usando il comando find? Ho bisogno di stampare i percorsi completi per i file.

+1

Hai provato 'find/percorso/su/file -name 'modello *''? –

+0

possibile duplicato di [Argomento lista troppo lungo errore per comandi rm, cp, mv] (http://stackoverflow.com/questions/11289551/argument-list-too-long-error-for-rm-cp-mv-commands) –

risposta

22

Questo è dove find in combinazione con xargs aiuterà.

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

Nota da commenti:xargs sarà utile se si vuole fare con la lista una volta che avete ottenuto da find. Se hai intenzione di elencare solo i file, allora find dovrebbe essere sufficiente. Tuttavia, se si desidera copy, delete o eseguire qualsiasi azione nell'elenco, quindi utilizzare xargs anziché -exec aiuterà.

+0

In realtà, find/path/to/files -name "pattern *" sembra fare esattamente quello che voglio - qualche ragione per non usarlo? Grazie! – DavidR

+0

Bene solo se desideri fare qualcosa una volta ottenuto un elenco. Ad esempio, copiali da qualche altra parte o eliminali. In questi casi 'xargs' aiuterà. Se vuoi solo elencarli, allora sì, non hai bisogno di 'xargs' per quello. –

+0

Great - In realtà sto usando questo comando per pipe in GNU parallel, che uso al posto di xargs. [Non c'è bisogno di -print0 in questo caso.] – DavidR