Rekurencyjne ls z warunkami

16

Dlaczego nie mogę użyć takiego polecenia, aby znaleźć wszystkie pliki pdf w katalogu i podkatalogach? Jak mam to zrobić? (Używam bash w Ubuntu)

ls -R *.pdf

EDYTOWAĆ

Jak w takim razie mógłbym usunąć wszystkie te pliki?

Tomba
źródło

Odpowiedzi:

22

Dlaczego nie mogę użyć takiego polecenia, aby znaleźć wszystkie pliki pdf w katalogu i podkatalogach?

Symbol wieloznaczny *.pdfw poleceniu jest rozszerzany o bashwszystkie pasujące pliki w bieżącym katalogu przed wykonaniem ls.


Jak mam to zrobić? (Używam bash w Ubuntu)

znajdź to twoja odpowiedź.

find . -name \*.pdf

to rekursywna lista plików pdf. -inamejest dopasowanie bez rozróżniania wielkości liter, więc

find . -iname \*.pdf

wyświetla wszystkie pliki .pdf, w tym na przykład foo.PDF

Możesz także użyć ls na przykład do ograniczonej liczby podfolderów

ls *.pdf */*.pdf

znaleźć wszystkie pliki pdf w podfolderach (pasuje do bar / foo.pdf, nie do bar / foo / asdf.pdf i nie do foo.PDF).

Jeśli chcesz usunąć pliki znalezione przy pomocy find, możesz użyć

find . -iname \*.pdf -delete
Olli
źródło
1
Na wypadek, gdybyś chciał otrzymać dane wyjściowe podobne do ls -lpolecenia, pokazujące rozmiar pliku, własność, datę itp., Możesz użyć findz -lsopcją, np.find . -name \*.pdf -ls
RFVoltolini
2

Jak powiedzieli inni, odpowiedź jest odpowiedzią.

Teraz, aby odpowiedzieć na drugą część.

  • Jak w takim razie mógłbym usunąć wszystkie te pliki?

    odnaleźć . -iname * .pdf -exec rm {} \;

Powinien to zrobić.

Matt H.
źródło
2
Musisz zacytować glob, aby nie został on przedwcześnie rozszerzony.
Wstrzymano do odwołania.
1

Użyj find zamiast ls

find . -name '*.pdf'
vartec
źródło