Je recherche le fichier « WSFY321.c » dans une énorme hiérarchie de répertoires.
Jutiliserais généralement GNU find : find . -name "WSFY321.c"
Mais je ne connais pas le cas, cela pourrait être en majuscules, en minuscules ou un mélange des deux.
Quelle est la manière la plus simple de trouver ce fichier?
Y a-t-il quelque chose de mieux que find . | grep -i "WSFY321.c"
?
Réponse
Les versions récentes de GNU find
ont un indicateur -iname
, pour les recherches de noms insensibles à la casse.
find . -iname "WSFY321.c"
Commentaires
Réponse
Avec GNU find, ou dautres versions de find qui lont:
find . -iname "WSFY321.c"
Avec les autres versions:
find . -name "[Ww][Ss][Ff][Yy]321.[Cc]"
Ou un compromis plus lent mais plus facile à saisir:
find . -name "????321.c" | grep -i "/WSFY[^/]*$"
Ou en zsh:
print -rl -- **/(#i)WSFY321.c
Commentaires
- @Gilles La version
grep
ne filtre que les majuscules, et je ne ' t comprendre le ' [^ /] ' .. (pas /) - @Gilles Quel est largument de utiliser les guillemets simples dans le premier cas (nom de fichier exact) sans guillemets du tout?
- @ Peter.O Non
*
après/
dans la version bash. Je voulais diregrep -i
. Je u se[^/]*
plutôt que.*
pour ne pas attraper les fichiers dans les répertoires dont le nom commence parWSFY
. - @Bernhard Consistency.
- Merci Gilles: Jai supprimé le commentaire précédent avec une syntaxe incorrecte, et testé la version modifiée, mais cela ne ' t fonctionne sans le * (pour une raison inattendue; au moins pour moi). Loption insensible à la casse ne fonctionne plus:
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
… Je suppose que ' s pourquoi on lappelle nocase glob : cela ne fonctionne que dans le contexte dun glob (du moins il semble).
Réponse
Deux solutions pour macOS:
Utilisation de GNU find
:
brew install findutils --with-default-names # restart Terminal find . -iname "WSFY321.c"
Utilisation de GNU sed
:
brew install gnu-sed --default-names # restart Terminal find -name "$(sed "s|\([[:alpha:]]\)|[\U\1\L\1]|g" <<<"WSFY321.c")"
Commentaires
- Sous macOS Sierra, loption -iname est disponible par défaut.
-type f
pour quil gagne ' pas la peine de regarder le nom si linœud est un répertoire. Mais ces ' niveaux doptimisation pédantes …find . -iname \*WSFY321.c\* -type f