Rekursif dengan kondisi

16

Mengapa saya tidak bisa menggunakan perintah seperti ini untuk menemukan semua file pdf dalam direktori dan subdirektori? Bagaimana saya melakukannya? (Saya menggunakan bash di ubuntu)

ls -R *.pdf

EDIT

Lalu bagaimana cara menghapus semua file ini?

Tomba
sumber

Jawaban:

22

Mengapa saya tidak bisa menggunakan perintah seperti ini untuk menemukan semua file pdf dalam direktori dan subdirektori?

Wildcard *.pdfdalam perintah Anda diperluas dengan bashke semua file yang cocok di direktori saat ini, sebelum dieksekusi ls.


Bagaimana saya melakukannya? (Saya menggunakan bash di ubuntu)

temukan adalah jawaban Anda.

find . -name \*.pdf

adalah daftar file pdf rekursif. -inamecocok dengan huruf besar-kecil, jadi

find . -iname \*.pdf

mencantumkan semua file .pdf, termasuk misalnya foo.PDF

Anda juga dapat menggunakan ls untuk subfolder dalam jumlah terbatas, misalnya

ls *.pdf */*.pdf

untuk menemukan semua file pdf dalam subfolder (cocok untuk bar / foo.pdf, bukan untuk bar / foo / asdf.pdf, dan bukan untuk foo.PDF).

Jika Anda ingin menghapus file yang ditemukan dengan find, Anda dapat menggunakan

find . -iname \*.pdf -delete
Olli
sumber
1
Hanya jika anda ingin output mirip dengan ls -lperintah, menunjukkan ukuran file, kepemilikan, tanggal, dsb, Anda dapat menggunakan finddengan -lspilihan, misalnyafind . -name \*.pdf -ls
RFVoltolini
2

Seperti yang orang lain katakan, temukan adalah jawabannya.

Sekarang untuk menjawab bagian lainnya.

  • Lalu bagaimana cara menghapus semua file ini?

    Temukan . -iname * .pdf -exec rm {} \;

Harus melakukannya.

Matt H
sumber
2
Anda perlu mengutip glob Anda agar tidak berkembang secara prematur.
Dijeda sampai pemberitahuan lebih lanjut.
1

Gunakan find bukan ls

find . -name '*.pdf'
vartec
sumber