Jessaie de comprendre comment utiliser loption find -maxdepth 0
.
Jai la structure de répertoires ci-dessous.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Maintenant, jexécute ma commande find
comme ci-dessous.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Sans aucune des commandes find
ci-dessus, file1 est renvoyé.
De la page de manuel de find
, je vois les informations ci-dessous.
-maxdepth 0 signifie appliquer uniquement les tests et les actions aux arguments de la ligne de commande.
Jai cherché des exemples avec loption -maxdepth 0
et je nai pas pu trouver dexemple approprié.
Mon find
version est,
find --version find (GNU findutils) 4.4.2
Quelquun peut-il me fournir des indications sur les cas -maxdepth 0
option serait utile ?
EDIT
Lorsque jexécute la commande ci-dessous, jobtiens le file1 être répertorié deux fois. Est-ce que cela fonctionne de cette façon?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Réponse
Supposons que nous ayons file1
dans le répertoire courant. Ensuite :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Voyons maintenant ce que dit la documentation:
-maxdepth 0 signifie onl y appliquer les tests et les actions aux arguments de la ligne de commande.
Dans mon premier exemple ci-dessus, seul le répertoire .
est répertorié sur la ligne de commande. Étant donné que .
na pas le nom file1
, rien nest répertorié dans la sortie. Dans mon deuxième exemple ci-dessus, .
et file1
sont répertoriés sur la ligne de commande et, car file1
correspond à -name "file1"
, il a été renvoyé dans la sortie
En dautres termes, -maxdepth 0
signifie faire pas rechercher des répertoires ou des sous-répertoires. Au lieu de cela, recherchez uniquement un fichier correspondant parmi ceux explicitement répertoriés sur la ligne de commande.
Dans vos exemples, seuls les répertoires étaient listés sur la ligne de commande et aucun dentre eux nétait nommé file1
. Par conséquent, aucune sortie.
En général, de nombreux fichiers et répertoires peuvent être nommés sur la ligne de commande. Par exemple, nous essayons ici une commande find
avec 11 fichiers et répertoires sur la ligne de commande:
$ ls d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 $ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1" file1
Chevauchement chemins
Considérez:
$ find . file1 -maxdepth 0 -iname file1 file1 $ find . file1 file1 -maxdepth 0 -iname file1 file1 file1 $ find . file1 file1 -maxdepth 1 -iname file1 ./file1 file1 file1
Apparemment, comme le souligne Ramesh, find
suivra chaque chemin spécifié sur la ligne de commande et recherchez les correspondances même si les chemins mènent au même fichier, comme dans . file
ou même si les chemins sont des doublons exacts, comme dans file1 file1
.
Commentaires
Réponse
Si vous souhaitez rechercher de manière non récursive des fichiers (pas des répertoires) dans un répertoire, utilisez:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
ne recherchera pas . Il essaiera uniquement de faire correspondre les noms de fichiers / répertoires que vous avez fournis comme arguments dans find
. Par exemple. dans linstruction ci-dessus, en utilisant une valeur 0
, essaierait de faire correspondre file1
à .
qui ne correspond pas. Passer *
au lieu de .
ferait que bash remplacerait *
par la liste des fichiers dans le répertoire actuel qui renverrait une correspondance.
find * -maxdepth 0 -name "file1"
. Le*
listera tous les fichiers du répertoire courant sur la ligne de commande.find
regarde chacun chemin sur la ligne de commande et signale les correspondances sur chacun deux même sil sagit de doublons.