2013-06-29 7 views
12

które chciałbym uruchomić następujące:Lista plików pasujące do wzorca, gdy zbyt wiele dla bash globowania

ls /path/to/files/pattern* 

i dostać

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

Jednakże, istnieje zbyt wiele plików pasujące do wzorca, który i uzyskałem

bash: /bin/ls: Argument list too long 

Jaki jest lepszy sposób to zrobić? Może używając polecenia find? Muszę wydrukować pełne ścieżki do plików.

+1

Czy próbowałeś 'find/path/to/files -name 'pattern *''? –

+0

możliwy duplikat [Argument list too long error dla poleceń rm, cp, mv] (http://stackoverflow.com/questions/11289551/argument-list-too-long-error-for-rm-cp-mv-commands) –

Odpowiedz

22

Tutaj pomoże find w połączeniu z xargs.

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

Uwaga od komentarzy:xargs pomoże, jeśli chcesz zrobić z listy po uzyskaniu go od find. Jeśli chcesz tylko wyświetlić listę plików, to powinno wystarczyć find. Jeśli jednak chcesz, aby copy, delete lub wykonać dowolną akcję na liście, pomoże Ci xargs zamiast -exec.

+0

Właściwie, find/path/to/files -name "pattern *" wydaje się robić dokładnie to, czego chcę - jakikolwiek powód, by tego nie używać? Dzięki! – DavidR

+0

Dobrze, jeśli chcesz coś zrobić po uzyskaniu listy. Na przykład skopiuj je gdzieś indziej lub usuń je. W takich przypadkach pomoże "xargs". Jeśli chcesz je wymienić, to tak, nie potrzebujesz do tego 'xargs'. –

+0

Świetnie - używam tego polecenia do potokowania równoległego GNU, którego używam zamiast xargs. [Nie ma potrzeby używania -print0 w tym przypadku.] – DavidR

Powiązane problemy