Polecenie Linux: znajdź pliki i uruchom na nich polecenie


16

Jak znaleźć wszystkie pliki w katalogu i podkatalogach i uruchomić na nich polecenie?

Na przykład,

find . -type f -name "*.txt" 

znajdzie wszystkie pliki txt i:

find . -type f -name "*.txt" | gedit

wysyła go do gedit, ale w pliku tekstowym. Chcę, aby gedit otworzył wszystkie pliki tekstowe.

Odpowiedzi:


22

Możesz użyć -execflagi, aby wykonać polecenie na każdym pasującym pliku:

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

Składnia

Składnia jest nieco dziwna (więcej informacji -exec command ;na stronach podręcznika):

The string `{}' is replaced by the current file name being processed

Możesz także rozważyć -execdir, co zrobi to samo, ale wykonuje polecenie z podkatalogu zawierającego dopasowany plik (jest to na ogół preferowane).


1
Dzięki. Widzę, że to działa. Ale co oznacza koniec („{}” \ :)? wykonać listę?

1
{}Stoi na bieżący nazwy pliku, a średnik jest właśnie zakończenia polecenia. Ukośnik odwrotny i otaczające go cudzysłowy mają jedynie na celu zapobieganie rozszerzaniu powłoki.
David Cain

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


Dzięki. Widzę, że to działa. Ale co robi -print0 | xargs -0 część oznacza?

1
@xyz, możesz przeczytać o flagach dowolnego polecenia UNIX za pomocą stron man. Spróbuj man findlub man xargs, /aby wyszukać daną flagę. Dokumentacja jest dość dobra, powinna odpowiedzieć na twoje pytania.
David Cain

1
-print0wypisuje znak NULL po każdym wpisie, -0oczekuje , że wpisy zostaną rozdzielone znakiem NULL. Jest to najbezpieczniejszy sposób radzenia sobie z trudnymi nazwami.
Notinlist

I czy to nie jest trochę dziwne, że składnia nie jest gedit xargs -0 zamiast xargs -0 gedit. Widzę, że to pierwsze nie działa, ale nie rozumiem dlaczego.

3
xargs jest lepszy niż -exec ze względu na wydajność, ponieważ xargs może „grupować” szereg argumentów przed przekazaniem ich do gedit. Jeśli trzeba uruchomić gedit dla każdego pliku osobno, zamień „... -print0 | xargs -0 gedit 'z' ... -print0 | xargs -0 -i gedit {} 'xargs jest jednym z tych poleceń, takich jak find i screen, których nigdy nie wiesz, jak sobie radziłeś bez roku po tym, jak się o tym dowiesz.
arclight
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.