pesta
Menggunakan globstaropsi shell, kita bisa menggunakan globbing rekursif./**/*
bash-4.3$ shopt -s globstar
bash-4.3$ for i in ./**/*.xml; do printf "%s\n" "$i" ; done
./adwaita-timed.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/META-INF/context.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/beans.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/web.xml
Perl
Perl memiliki modul Find, yang memungkinkan untuk traversal direktori pohon rekursif. Dalam find()fungsi khusus , kita dapat mendefinisikan subrutin yang diinginkan dan direktori yang ingin kita lintasi, dalam contoh ini .. Satu-liner dalam kasus tersebut adalah:
bash-4.3$ perl -le 'use File::Find; find(sub{-f && $_ =~ /.xml$/ && print $File::Find::name},".")'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Python
Sementara Perl memiliki seluruh modul yang didedikasikan untuk traversal pohon rekursif, Python memiliki fungsi rapi walk()yang merupakan bagian dari osmodul, dan berulang kali mengembalikan tuple jalur teratas, daftar semua subdirektori, dan daftar nama file. Kita dapat melakukan hal berikut:
bash-4.3$ python -c 'import os,sys; [ sys.stdout.write(os.path.join(r,i)+"\n") for r,s,f in os.walk(".") for i in f if i.endswith(".xml") ]'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Ini mungkin jauh lebih rapi sebagai skrip:
#!/usr/bin/env python
import os,sys
for r,s,f in os.walk("."):
for i in f:
if i.endswith(".xml")
print(os.path.join(r,i))
Temukan
Jawaban lain telah disebutkan finduntuk traversal rekursif, dan itulah alat masuk untuk pekerjaan itu. Apa yang perlu disebutkan adalah fakta yang findmemiliki beberapa saklar baris perintah, seperti -printfuntuk mencetak output dalam format yang diinginkan, -type funtuk menemukan hanya file biasa, -inumuntuk mencari berdasarkan nomor inode, -mtimeuntuk mencari berdasarkan tanggal modifikasi, -exec <command> {} \;untuk mengeksekusi perintah tertentu untuk memproses file dengan meneruskan file sebagai argumen (di mana placeholder {}standar finduntuk file saat ini), dan banyak lainnya, jadi silakan baca manualnya untuk find.
ls -R | grep .xml