2010-10-13 11 views
164

¿Es posible utilizar el comando find de alguna manera que no se repita en los subdirectorios? Por ejemplo,encontrar sin recursion

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

Y el resultado de algo así como find DirsRoot --donotrecuourse -type f sólo habrá File1, File2?

Respuesta

243

Creo que obtendrá lo que quiera con la opción -maxdepth 1, en función de su estructura de comando actual. Si no, puede intentar mirar man page para find.

entrada pertinente (por conveniencia):

-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. 

Sus opciones son básicamente:

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

O:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files 
+0

Para el ejemplo del OP creo que esto debe ser '-maxdepth 1'? –

+0

@Paul R: En realidad, depende de cómo quiera manejar los archivos ocultos, pero he modificado mi respuesta. Para su ejemplo '1' es probablemente lo que él quiere. – eldarerathis

+0

Para mí, '-maxdepth 0' no muestra * ningún * archivo, pero' -maxdepth 1' funciona como corresponde, y también se muestran los archivos ocultos. –

21

creo que busca -maxdepth 1.

+1

Para el ejemplo de OP, creo que esto debe ser '-maxdepth 1'? –

+0

Sí, si utilizara el comando exactamente como en su ejemplo, sería 1. Mi error. –

13

Si usted busca una solución compatible con POSIX:

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

-maxdepth no es compatible con POSIX opción.

+0

gracias por esta solución, pero ¿no se puede simplificar para 'encontrar DirsRoot/* -type f -prune'? – dokaspar

+0

@dokaspar ¡Muy buena pregunta! (se olvidó de insertar "-o" antes de '-prune' btw) La respuesta es no, no puede. Para comprender completamente POR QUÉ no se puede simplificar, simplemente emita el comando 'set -x' antes de emitir el' find DirsRoot/* -type f -o -prune' y lo verá usted mismo inmediatamente. La causa principal son las limitaciones de la expansión del shell de la expresión 'DirsRoot/*'. – sqrt163

Cuestiones relacionadas