Comment puis-je rechercher un nom générique dans tous les sous-dossiers? Quel serait l'équivalent de la commande DOS: dir *pattern* /s
dans * nix?
Vous pouvez utiliser find
. Si, par exemple, vous vouliez trouver tous les fichiers et répertoires qui avaient abcd
dans le nom de fichier, vous pouvez exécuter:
find . -name '*abcd*'
Zsh:
ls -ld -- **/*abcd*
Ksh93:
set -o globstar # put this line in your ~/.kshrc
ls -ld -- **/*abcd*
Bash ≥4:
shopt -s globstar # put this line in your ~/.bashrc
ls -ld -- **/*abcd*
Yash:
set -o extendedglob # put this line in your ~/.yashrc
ls -ld -- **/*abcd*
tcsh:
set globstar
ls -ld -- **/*abcd*
poisson:
ls -ld -- **abcd*
(attention certains de ces shells suivront des liens symboliques lors de la descente de l'arborescence de répertoires; certains de ceux qui n'aiment pas zsh
, yash
ou tcsh
ont ***/*abcd*
pour le faire).
Portable (sauf pour les systèmes très anciens; OpenBSD a pris du temps mais prend finalement en charge exec … +
depuis le 5.1):
find . -name '*abcd*' -exec ls -ld {} +
Pas POSIX mais fonctionne sur * BSD, Linux, Cygwin, BusyBox:
find . -name '*abcd*' -print0 | xargs -0 ls -ld
Notez que sauf dans certains BSD, si aucun fichier correspondant n'est trouvé, ls -ld
sera exécuté sans arguments, donc listera .
. Avec certaines implémentations xargs
, vous pouvez utiliser le -r
option pour contourner cela.
Non mentionné dans les autres réponses est
ls -R1 | grep pattern
ls arguments utilisés:
-R, --recursive
list subdirectories recursively
-1 list one file per line