J'ai une structure de répertoires comme celle-ci
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
Il y a un sous-dossier entrant dans tous les dossiers du répertoire Data. Je veux obtenir tous les fichiers de tous les dossiers et sous-dossiers sauf les répertoires def / entrant et 456 / entrant. J'ai essayé avec la commande suivante
find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print
mais cela ne fonctionne pas comme prévu.
Ravi
grep -v something
faites-le pour exclure tout ce que vous ne voulez pasRéponses:
Cela marche:
Explication:
find /home/feeds/data
: démarrer la recherche récursivement à partir du chemin spécifié-type f
: rechercher uniquement des fichiers-not -path "*def/incoming*"
: n'incluez rien avecdef/incoming
dans son chemin-not -path "*456/incoming*"
: n'incluez rien avec456/incoming
dans son cheminla source
-path
correspond à toute la chaîne, donc si vous le faitesfind .
, vos-path
chaînes doivent être./path/to/directory/*
-not -path
certainement dans cet exemple, maisfind
continue d'itérer dans la structure de répertoires et d'utiliser des cycles de processeur pour parcourir tous ces répertoires / fichiers. pour éviterfind
d'itérer sur ces répertoires / fichiers (peut-être qu'il y a des millions de fichiers), vous devez utiliser-prune
(l'-prune
option est cependant difficile à utiliser).Juste pour la documentation: vous devrez peut-être creuser plus profondément car il y a beaucoup de constellations de recherche et de saut (comme je devais le faire). Il se peut que ce
prune
soit votre ami pendant que-not -path
ne fasse pas ce que vous attendez.Voici donc un exemple précieux de 15 exemples de recherche qui excluent les répertoires:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
Pour créer un lien vers la question initiale, l'exclusion a finalement fonctionné pour moi comme ceci:
Ensuite, si vous souhaitez trouver un fichier et toujours exclure les chemins, ajoutez simplement
| grep myFile.txt
.Cela peut également dépendre de votre version de recherche. Je vois:
la source
-name
correspond uniquement au nom du fichier, pas au chemin complet. Vous voulez utiliser à la-path
place, pour les parties dans lesquelles vous élaguez les répertoires commedef/incoming
.la source
la source
find ... -print0
en conjonction avec une version ultérieurexargs -0
En suivant cette procédure, comment exclure un répertoire dans find. commande :
la source