pesta
Menggunakan globstar
opsi 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 os
modul, 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 find
untuk traversal rekursif, dan itulah alat masuk untuk pekerjaan itu. Apa yang perlu disebutkan adalah fakta yang find
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 {}
standar find
untuk file saat ini), dan banyak lainnya, jadi silakan baca manualnya untuk find
.
ls -R | grep .xml