darbe
globstarShell seçeneğini kullanarak özyinelemeli globbing'i kullanabiliriz../**/*
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 Findözyinelemeli dizin ağacı geçişi sağlayan bir modül vardır . Özel find()fonksiyon içinde, istenen bir alt yordam ve geçiş yapmak istediğimiz dizini bu örnekte tanımlayabiliriz .. Böyle bir durumda tek gömlek şöyle olur:
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
piton
Perl özyinelemeli ağaç geçişine adanmış bir modüle sahip olsa da Python, modülün bir walk()parçası olan düzenli bir işleve sahiptir osve art arda en üstteki yolun demetini, tüm alt dizinlerin listesini ve dosya adlarının listesini döndürür. Aşağıdakileri yapabiliriz:
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
Bu bir senaryo olarak çok daha iyi olabilir:
#!/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))
bulmak
findÖzyinelemeli geçiş için diğer cevaplar da belirtilmiştir ve işte işe yarayan araç budur. Belirtilmesi gereken find, -printfçıktıyı istenen biçimde yazdırmak, -type fyalnızca normal dosyaları bulmak, -inuminode numarasıyla -mtimearamak, değişiklik tarihine göre aramak -exec <command> {} \;, dosyayı işlemek için belirli bir komutu çalıştırmak gibi çoklu komut satırı anahtarlarına sahip olmasıdır. argüman olarak dosya geçirerek ile (burada {}standarttır findgeçerli dosya için yer tutucu) ve diğerleri böylece için manpage okuyunuz find.
ls -R | grep .xml