darbe
globstar
Shell 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 os
ve 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 f
yalnızca normal dosyaları bulmak, -inum
inode numarasıyla -mtime
aramak, 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 find
geçerli dosya için yer tutucu) ve diğerleri böylece için manpage okuyunuz find
.
ls -R | grep .xml