Existe-t-il un moyen simple de rechercher récursivement tous les fichiers d'une hiérarchie de répertoires qui ne se terminent pas par une liste d'extensions? Par exemple, tous les fichiers qui ne sont pas * .dll ou * .exe
La recherche UNIX / GNU, aussi puissante soit-elle, ne semble pas avoir de exclude
mode (ou je le manque), et j'ai toujours eu du mal à utiliser des expressions régulières pour trouver des choses qui ne correspondent pas à une expression particulière .
Je suis dans un environnement Windows (en utilisant le port GnuWin32 de la plupart des outils GNU), donc je suis également ouvert aux solutions Windows uniquement.
command-line
find
Cristian Diaconescu
la source
la source
-not
peut être remplacé par'!'
(Devis recommandé). D'un autre côté,-name
est sensible à la casse alors qu'il-iname
est insensible à la casse.la source
-not
est une mauvaise option, celle-ci!
fonctionne bien :)Les deux premières options de nom n'ont pas d'option -print, elles ont donc été ignorées. Tout le reste est imprimé.
la source
Vous pouvez faire quelque chose en utilisant la commande grep:
Le
-v
drapeau surgrep
signifie spécifiquement "trouver des choses qui ne correspondent pas à cette expression".la source
un de plus :-)
Référence de la commande de recherche Unix
la source
la source
Linux / OS X:
À partir du répertoire actuel, recherchez récursivement tous les fichiers se terminant par .dll ou .exe
À partir du répertoire actuel, recherchez récursivement tous les fichiers qui ne se terminent pas par .dll ou .exe
Remarques:
(1) L'option P dans grep indique que nous utilisons le style Perl pour écrire nos expressions régulières à utiliser conjointement avec la commande grep . Dans le but d'exécuter la commande grep en conjonction avec des expressions régulières, je trouve que le style Perl est le style le plus puissant qui soit.
(2) L'option v dans grep demande au shell d'exclure tout fichier qui satisfait l'expression régulière
(3) Le caractère $ à la fin de dire ".dll $" est un caractère de contrôle de délimiteur qui indique au shell que la chaîne de nom de fichier se termine par ".dll"
la source
D'autres solutions sur cette page ne sont pas souhaitables si vous avez une longue liste d'extensions - maintenir une longue séquence
-not -name 'this' -not -name 'that' -not -name 'other'
serait fastidieuse et sujette aux erreurs - ou si la recherche est programmatique et la liste des extensions est construite au moment de l'exécution.Pour ces situations, une solution qui sépare plus clairement les données (la liste des extensions) et le code (les paramètres à
find
) peut être souhaitable. Étant donné une structure de répertoires et de fichiers qui ressemble à ceci:Vous pouvez faire quelque chose comme ça:
Ce qui se traduit par:
Vous pouvez modifier la liste des extensions sans modifier le bloc de code.
REMARQUE ne fonctionne pas avec OSX natif
find
- utilisez plutôt gnu find.la source