1 votes

Recherche de fichiers à l'exclusion de certains répertoires

Je travaille avec la structure de répertoire suivante :

onathan@Aristotle:~/EclipseWorkspaces/ShellUtilities/ShellUtilities$ ls -R
.:
calculateTargetDay  CustomizeIso  ec  makeExecutable  Models  modifyElementList  Sourced  test file  Testing  valrelease

./Models:
testcase

./Sourced:
colors  stddefs  stdFunctions  SupportTesting

./Testing:
test  testCalculateTargetDay  testColors  testModifyElementList  testStddefs  testStdFunctions  testSupportTesting  tst

Ce que je veux faire, c'est lancer une commande sur tous les fichiers du répertoire de premier niveau et du répertoire Essais . Je ne veux pas exécuter la commande sur les fichiers dans les répertoires Source : et Modèles . Pour ce faire, j'ai exécuté la commande suivante :

find . -name Sourced -prune -name Models -prune ! -name '\.*'  -execdir echo '{}' \;

Dans cet exemple, la commande n'a été exécutée sur aucun des fichiers de la structure du répertoire.

Lorsque j'ai exécuté la commande suivante dans la même structure de répertoire :

find . ! -name '\.*'  -execdir echo '{}' \;

J'ai obtenu le résultat suivant

./calculateTargetDay
./CustomizeIso
./Testing
./testModifyElementList
./test
./testColors
./testStdFunctions
./testCalculateTargetDay
./testStddefs
./testSupportTesting
./tst
./test file
./modifyElementList
./ec
./Sourced
./stdFunctions
./stddefs
./SupportTesting
./colors
./valrelease
./Models
./testcase
./makeExecutable

Comme vous pouvez le constater, je peux exécuter une commande sur l'arborescence du répertoire et faire en sorte qu'elle s'applique à tous les fichiers, ou je peux essayer d'être sélectif et me retrouver sans aucun fichier. Comment puis-je obtenir l'application sélective d'une commande dont j'ai besoin ?

1voto

heemayl Points 85741

Vous pouvez le faire avec Regex, à partir du répertoire parent :

find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$'

\./([^/]+|Testing/.*)$ trouvera tous les fichiers ( -type f ) dans le répertoire courant et dans le répertoire Testing uniquement dans le répertoire.

Pour exécuter une commande, ajoutez -exec action :

find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$' -exec echo {} \;

Remplacer echo avec votre commande actuelle.

Exemple :

$ find . -type f                                                                           
./foo
./Sourced/src
./Testing/test
./bar
./spam
./Models/model

$ find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$'                 
./foo
./Testing/test
./bar
./spam

$ find . -type f -regextype posix-egrep -regex '\./([^/]+|Testing/.*)$' -exec echo {} \;
./foo
./Testing/test
./bar
./spam

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X