bash
Usando l' globstaropzione shell, possiamo usare il globbing ricorsivo./**/*
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 ha un modulo Find, che consente l'attraversamento di alberi di directory ricorsivi. All'interno della find()funzione speciale , possiamo definire una subroutine desiderata e la directory che vogliamo attraversare, in questo esempio .. Il one-liner in tal caso sarebbe:
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
Pitone
Mentre Perl ha un intero modulo dedicato alla traslazione di alberi ricorsivi, Python ha una funzione ordinata walk()che fa parte del osmodulo e restituisce ripetutamente tupla del percorso più in alto, elenco di tutte le sottodirectory e elenco di nomi di file. Possiamo fare quanto segue:
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
Questo potrebbe essere molto più ordinato come uno script:
#!/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))
trova
Altre risposte sono state menzionate findper l'attraversamento ricorsivo e questo è lo strumento ideale per il lavoro. Ciò che è necessario menzionare è il fatto che findha più opzioni della riga di comando, come -printfstampare l'output nel formato desiderato, -type ftrovare solo file regolari, -inumcercare per numero di inode, -mtimecercare per data di modifica, -exec <command> {} \;eseguire un comando particolare per elaborare il file con il passaggio del file come argomento (dove {}è il findsegnaposto standard per il file corrente) e molti altri, per favore leggi la manpage per find.
ls -R | grep .xml