Saya mencoba mencari semua XML
file dalam direktori tertentu dan semua sub-direktori (secara rekursif) di dalamnya.
ls -R *.xml
hanya daftar file dalam direktori saat ini. Saya cukup yakin, sub-folder itu sendiri memiliki beberapa .xml
file, tetapi tidak ada yang muncul.
Apakah ini masalah konfigurasi?
ls -R | grep .xml
Jawaban:
Coba gunakan Temukan
sumber
find
atasls -R
?find
dangrep
, kapanfind
bisa melakukan penyaringan menggunakan kedua regex dan gumpalan, dan tidak menggunakanfind
'-print0
dan grep-z
ketika Anda perlu mencampur.Anda dapat melakukannya hanya dengan menemukan :
.
adalah direktori saat ini. Jika Anda perlu mencari di direktori lain, ganti.
dengan jalur direktori.sumber
.php
file di direktori saat ini. Tetapi hanya mengembalikan.php
file dalam direktori saat ini, tidak mencari secara rekursif di sub-direktori. Itu sebabnya saya bertanya apakahfind
perintah mencari secara rekursif atau tidak.find
perintah mencari secara rekursif. Jika Anda tidak mengutip parameter, saya pikir shell Anda mungkin melakukan ekspansi pada*
, jadi itu akan cocok dengan file di direktori saat ini.Coba perintah ini:
ls
tidak memiliki opsi untuk memfilter output. Untuk itu Anda perlu menggunakan pipa. Ini meneruskan output darils
kegrep
, yang kemudian memfilternya untuk hanya menampilkan.xml
file.sumber
ls
?pesta
Menggunakan
globstar
opsi shell, kita bisa menggunakan globbing rekursif./**/*
Perl
Perl memiliki modul
Find
, yang memungkinkan untuk traversal direktori pohon rekursif. Dalamfind()
fungsi khusus , kita dapat mendefinisikan subrutin yang diinginkan dan direktori yang ingin kita lintasi, dalam contoh ini.
. Satu-liner dalam kasus tersebut adalah:Python
Sementara Perl memiliki seluruh modul yang didedikasikan untuk traversal pohon rekursif, Python memiliki fungsi rapi
walk()
yang merupakan bagian darios
modul, dan berulang kali mengembalikan tuple jalur teratas, daftar semua subdirektori, dan daftar nama file. Kita dapat melakukan hal berikut:Ini mungkin jauh lebih rapi sebagai skrip:
Temukan
Jawaban lain telah disebutkan
find
untuk traversal rekursif, dan itulah alat masuk untuk pekerjaan itu. Apa yang perlu disebutkan adalah fakta yangfind
memiliki beberapa saklar baris perintah, seperti-printf
untuk mencetak output dalam format yang diinginkan,-type f
untuk menemukan hanya file biasa,-inum
untuk mencari berdasarkan nomor inode,-mtime
untuk mencari berdasarkan tanggal modifikasi,-exec <command> {} \;
untuk mengeksekusi perintah tertentu untuk memproses file dengan meneruskan file sebagai argumen (di mana placeholder{}
standarfind
untuk file saat ini), dan banyak lainnya, jadi silakan baca manualnya untukfind
.sumber