frapper
En utilisant l' globstaroption shell, nous pouvons utiliser la méthode récursive./**/*
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 a un module Findqui permet une traversée récursive de l’arborescence de répertoires. Dans la find()fonction spéciale , nous pouvons définir un sous-programme souhaité et le répertoire que nous voulons parcourir, dans cet exemple .. Le one-liner dans ce cas serait:
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
Alors que Perl a tout un module dédié à la traversée d'arbres récursive, Python a une fonction soignée walk()qui fait partie du osmodule, et renvoie à plusieurs reprises le tuple du chemin le plus haut, la liste de tous les sous-répertoires et la liste des noms de fichiers. Nous pouvons faire ce qui suit:
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
Cela pourrait être beaucoup mieux comme 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))
trouver
D'autres réponses ont été mentionnées findpour la traversée récursive, et c'est l'outil de prédilection pour le travail. Ce qu'il faut mentionner, c’est le fait qu’il findexiste plusieurs commutateurs de ligne de commande, par exemple -printfimprimer la sortie au format souhaité, -type frechercher uniquement les fichiers normaux, -inumrechercher par numéro d’inode, -mtimerechercher par date de modification, -exec <command> {} \;exécuter une commande particulière pour traiter le fichier. en passant le fichier comme argument (où {}est l’ findespace réservé standard pour le fichier actuel), et beaucoup d’autres, merci de lire la page de manuel pour find.
ls -R | grep .xml