deneme
Kullanım globstar
kabuk seçeneği, özyinelemeli globbing'i kullanabiliriz ./**/*
bash-4.3$ shopt -s globstarbash-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
Perlname
Perl'in bir modülü var Find
, özyinelemeli dizin ağacı geçişi sağlar. Özel içinde find()
işlev, istenen bir alt yordamı ve geçmek istediğimiz dizini tanımlayabiliriz, bu örnekte .
. Böyle bir durumda tek astar şöyle olacaktır:
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ış bütün bir modüle sahipken, Python'un düzgün bir işlevi vardır walk()
bu bir parçası os
modül ve art arda en üstteki yolun tuple'ını, 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 düzgün olabilir:
#!/usr/bin/env pythonimport os,sys for r,s,f in os.walk("."): for i in f: if i.endswith(".xml") print(os.path.join(r,i))
bulmak
Diğer cevaplar bahsetti find
özyinelemeli geçiş için ve bu iş için go-to aracıdır. Bahsetmeye ihtiyaç duyulan şey şu ki find
gibi birden çok komut satırı anahtarı vardır -printf
çıktıyı istenen formatta yazdırmak için, -type f
yalnızca normal dosyaları bulmak için, -inum
inode numarasına göre arama yapmak için, -mtime
değişiklik tarihine göre arama yapmak için, -exec <command> {} \;
dosyayı argüman olarak geçirerek dosyayı işlemek için belirli bir komutu çalıştırmak için ( burada {}
bu standarttır find
geçerli dosya için yer tutucu) ve diğerleri için lütfen manpage'i okuyun find
.