encontrar sin recursividad

246

¿Es posible usar el findcomando de alguna manera para que no vuelva a aparecer en los subdirectorios? Por ejemplo,

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

¿Y el resultado de algo así find DirsRoot --donotrecuourse -type fserá solo File1, File2?

filippo
fuente

Respuestas:

380

Creo que obtendrá lo que desea con la -maxdepth 1opción, según su estructura de comando actual. Si no es así, puede intentar mirar la página del manual para find.

Entrada relevante (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
eldarerathis
fuente
Para el ejemplo del OP, creo que esto debe ser -maxdepth 1?
Paul R
@Paul R: En realidad, ese tipo de depende de cómo quiera manejar los archivos ocultos, pero de todos modos he modificado mi respuesta. Por su ejemplo 1es probablemente lo que quiere.
eldarerathis
1
Para mí, -maxdepth 0no muestra ningún archivo pero -maxdepth 1funciona según lo previsto, y también se muestran archivos ocultos.
Bruce Wayne
1
@BruceWayne tenga *en cuenta la entrada find DirsRoot/* -maxdepth 0 -type f. Si deja eso fuera, no mostrará ningún archivo.
mapeters
@mook, gracias, pero no recuerdo el contexto original en el que tuve este problema, jaja.
Bruce Wayne
33

Creo que lo estás buscando -maxdepth 1.

paradoja de los gofres
fuente
1
Para el ejemplo del OP, creo que esto debe ser -maxdepth 1?
Paul R
Sí, si estuviera usando el comando exactamente como en su ejemplo, entonces sería 1. Mi error.
la paradoja de la galleta
17

Si busca una solución compatible con POSIX:

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

-maxdepth no es una opción compatible con POSIX.

sqr163
fuente
gracias por esta solución, pero ¿no se puede simplificar esto find DirsRoot/* -type f -prune?
dokaspar
@dokaspar Muy buena pregunta! (olvidó insertar "-o" antes por -prunecierto) La respuesta es no, no puede. Para comprender completamente POR QUÉ no se puede simplificar, simplemente emita un set -xcomando antes de emitir el find DirsRoot/* -type f -o -prunee inmediatamente lo verá usted mismo. La causa raíz son las limitaciones de la expansión de la shell de DirsRoot/*expresión.
sqr163
¡No funciona en centos, sigue haciendo recursión completa en la salida! El comando correcto esfind . -name . -o -prune
Reishin el
en Solaris de todos modos, manteniendo DirsRoot como la ruta deseada, no necesita cd; en su lugar, puede: encontrar DirsRoot /. -tipo f -print -o -name. -o -prune
spioter