J'essaie de rechercher tous les XML
fichiers dans un répertoire particulier et tous les sous-répertoires (récursivement) qu'il contient.
ls -R *.xml
ne répertorie que les fichiers du répertoire en cours. Je suis tout à fait sûr, les sous-dossiers eux-mêmes ont plusieurs .xml
fichiers, mais aucun ne s'affiche.
Est-ce un problème de configuration?
ls -R | grep .xml
Réponses:
Essayez d'utiliser Trouver
la source
find
finils -R
?find
etgrep
, quandfind
peut faire le filtrage en utilisant les expressions rationnelles et globs, et non à l' aidefind
de-print0
et grep de-z
quand vous avez besoin de mélanger.Vous pouvez le faire avec find only:
.
est le répertoire en cours. Si vous devez rechercher dans un autre répertoire, remplacez-le.
par le chemin du répertoire.la source
.php
fichiers dans le répertoire actuel. Mais il n'a renvoyé que les.php
fichiers du répertoire en cours, sans recherche récursive dans les sous-répertoires. C'est pourquoi je demande si lafind
commande est récursive ou non.find
commande effectue une recherche récursive. Si vous ne citez pas le paramètre, je pense que votre shell peut procéder à une expansion de la*
, il correspond donc aux fichiers du répertoire en cours.Essayez cette commande:
ls
n'a pas les options pour filtrer la sortie. Pour cela, vous devez utiliser un tuyau. Cela transmet la sortie dels
àgrep
, qui les filtre ensuite pour afficher uniquement les.xml
fichiers.la source
ls
?frapper
En utilisant l'
globstar
option shell, nous pouvons utiliser la méthode récursive./**/*
Perl
Perl a un module
Find
qui permet une traversée récursive de l’arborescence de répertoires. Dans lafind()
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: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 duos
module, 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:Cela pourrait être beaucoup mieux comme script:
trouver
D'autres réponses ont été mentionnées
find
pour 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’ilfind
existe plusieurs commutateurs de ligne de commande, par exemple-printf
imprimer la sortie au format souhaité,-type f
rechercher uniquement les fichiers normaux,-inum
rechercher par numéro d’inode,-mtime
rechercher 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’find
espace réservé standard pour le fichier actuel), et beaucoup d’autres, merci de lire la page de manuel pourfind
.la source