Je dois trouver (ou plus précisément compter) tous les fichiers correspondant à ce modèle:
*/foo/*. doc
Où le premier astérisque générique comprend un nombre variable de sous-répertoires.
Avec gnu find, vous pouvez utiliser regex, qui (contrairement à -name
) correspond au chemin entier:
find . -regex '.*/foo/[^/]*.doc'
Pour ne compter que le nombre de fichiers:
find . -regex '.*/foo/[^/]*.doc' -printf '%i\n' | wc -l
(Le %i
code de format provoque find
imprimer le numéro d’inode au lieu du nom de fichier; À la différence du nom de fichier, le numéro d'inode est garanti sans caractères, comme une nouvelle ligne. Le calcul est donc plus fiable. Merci à @tripleee pour la suggestion.)
Je ne sais pas si cela fonctionnera sous OSX, cependant.
que diriez-vous:
find BASE_OF_SEARCH/*/foo -name \*.doc -type f | wc -l
Qu'est-ce que cela fait:
L'avantage de cette méthode:
UPDATE: vous voulez une profondeur variable? D'accord:
find BASE_OF_SEARCH -name \*.doc -type f | grep foo | wc -l
Vous pouvez éventuellement filtrer les résultats dont le nom contient "foo", car cela les affichera également.
Sur la base des réponses données sur cette page d’autres pages, j’ai réussi à rassembler les éléments suivants, dans lesquels une recherche est effectuée dans le dossier actuel et dans tous les autres dossiers inférieurs pour tous les fichiers portant l’extension pdf, suivie de un filtrage pour ceux qui contiennent test_text sur leur titre.
find . -name "*.pdf" | grep test_text | wc -l
Non testé, mais essayez:
find . -type d -name foo -print | while read d; do echo "$d/*.doc" ; done | wc -l
trouver tous les répertoires "foo" (à différentes profondeurs) (ceci ignore les liens symboliques, si cela fait partie du problème, vous pouvez les ajouter); utilisez Shell Globbing pour trouver tous les fichiers ".doc", puis comptez-les.