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?

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

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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.