270 votes

UNIX trouver pour trouver des noms de fichiers ne se terminant pas par des extensions spécifiques?

Est-il un moyen simple de trouve de façon récursive tous les fichiers dans un répertoire de la hiérarchie, qui n' a pas de fin dans la liste des extensions? E. g. tous les fichiers qui ne sont pas *.dll ou *.exe

UNIX/GNU trouver, puissant tel qu'il est, ne semble pas avoir un exclude mode (ou je suis absente), et j'ai toujours trouvé qu'il est difficile d'utiliser des expressions régulières pour trouver des choses qui ne correspondent à une expression particulière.

Je suis dans un environnement Windows (à l'aide de la GnuWin32 port de la plupart des outils GNU), donc je suis également ouvert pour Windows uniquement des solutions.

433voto

Hardy Points 6274

Ou sans ( et le besoin d'y échapper:

 find . -not -name "*.exe" -not -name "*.dll"
 

et d'exclure également la liste des répertoires

 find . -not -name "*.exe" -not -name "*.dll" -not -type d
 

ou en logique positive ;-)

 find . -not -name "*.exe" -not -name "*.dll" -type f
 

51voto

Chen Levy Points 4415
find . ! \( -name "*.exe" -o -name "*.dll" \)

10voto

Jeff Ferland Points 9485
 $ find . -name \*.exe -o -name \*.dll -o -print
 

Les deux premières options -name n'ont pas d'option -print, elles ont donc été ignorées. Tout le reste est imprimé.

9voto

VoteyDisciple Points 23229

Vous pourriez faire quelque chose comme ...

 find . | grep -v '(dll|exe)$'
 

Le drapeau -v sur grep signifie spécifiquement "trouver des éléments qui ne correspondent pas à cette expression".

2voto

logic Points 11

un de plus :-)

$ ls -ltr
total 10
-rw-r--r-- 1 scripter linuxdumb 47 23 Décembre à 14:46 test1
-rw-r--r-- 1 scripter linuxdumb 0 4 Jan à 23:40 test4
-rw-r--r-- 1 scripter linuxdumb 0 4 Jan à 23:40 test3
-rw-r--r-- 1 scripter linuxdumb 0 4 Jan à 23:40 test2
-rw-r--r-- 1 scripter linuxdumb 0 Jan 4 23:41 file5
-rw-r--r-- 1 scripter linuxdumb 0 Jan 4 23:41 fichier4
-rw-r--r-- 1 scripter linuxdumb 0 Jan 4 23:41 fichier3
-rw-r--r-- 1 scripter linuxdumb 0 Jan 4 23:41 fichier2
-rw-r--r-- 1 scripter linuxdumb 0 Jan 4 23:41 fichier1
$ find . -type f ! -name "*1" ! -name "*2" -print
./test3
./test4
./fichier3
./fichier4
./file5
$

Unix trouver la référence de la commande

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X