trouver sans récursivité

246

Est-il possible d'utiliser la findcommande d'une manière qui ne sera pas récursive dans les sous-répertoires? Par exemple,

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

Et le résultat de quelque chose comme find DirsRoot --donotrecuourse -type fsera seulement File1, File2?

filippo
la source

Réponses:

380

Je pense que vous obtiendrez ce que vous voulez avec l' -maxdepth 1option, en fonction de votre structure de commande actuelle. Sinon, vous pouvez essayer de consulter la page de manuel de find.

Entrée pertinente (pour des raisons de commodité):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

Vos options sont essentiellement:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

Ou:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files
eldarerathis
la source
Pour l'exemple du PO, je pense que cela doit être -maxdepth 1?
Paul R
@ Paul R: En fait, cela dépend de la façon dont il veut gérer les fichiers cachés, mais j'ai néanmoins modifié ma réponse. Car son exemple 1est probablement ce qu'il veut.
eldarerathis du
1
Pour moi, -maxdepth 0ne montre aucun fichier mais -maxdepth 1fonctionne comme prévu, avec des fichiers cachés également affichés.
Bruce Wayne
1
@BruceWayne noter l' *en find DirsRoot/* -maxdepth 0 -type f. Si vous omettez cela, il ne montrera aucun fichier.
mapeters
@mook, merci, mais je ne me souviens pas du contexte d'origine dans lequel j'ai eu ce problème, haha.
Bruce Wayne
33

Je crois que vous cherchez -maxdepth 1.

paradoxe de la gaufre
la source
1
Pour l'exemple du PO, je pense que cela doit être -maxdepth 1?
Paul R
Oui, s'il utilisait la commande exactement comme dans son exemple, alors ce serait 1. Mon erreur.
paradoxe de la gaufre du
17

Si vous recherchez une solution compatible POSIX:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepth n'est pas une option compatible POSIX.

sqr163
la source
merci pour cette solution, mais cela ne peut-il pas être simplifié find DirsRoot/* -type f -prune?
dokaspar
@dokaspar Vraiment une excellente question! (vous avez oublié d'insérer "-o" avant -prunebtw) La réponse est non, elle ne le peut pas. Pour bien comprendre POURQUOI cela ne peut pas être simplifié, émettez simplement la set -xcommande avant d'émettre le find DirsRoot/* -type f -o -pruneet vous le verrez immédiatement vous-même. La cause première est les limites de l'expansion de shell de l' DirsRoot/*expression.
sqr163
ne fonctionne pas sur les centos, faisant toujours une récursivité complète en sortie !!!! La commande appropriée estfind . -name . -o -prune
Reishin
sur Solaris de toute façon, en gardant DirsRoot comme chemin d'accès souhaité, vous n'avez pas besoin de cd; à la place, vous pouvez: trouver DirsRoot /. -type f -print -o -name. -o -prune
spioter