Explicando la salida de xargs de dos comandos de búsqueda

Explicando la salida de xargs de dos comandos de búsqueda

Tengo una estructura de directorios de

  • carpeta1
    • carpeta2
      • carpeta2a
      • carpeta2b
    • carpeta3
      • carpeta3a
      • carpeta3b

Estoy confundido por la salida xargs del siguiente comando:

XXXXXX:folder1 user$ find . -type d -maxdepth 1 | xargs -I{} find {} -type d -maxdepth 1 | xargs -I{} echo {}

.
./folder2
./folder3
./folder2
./folder2/folder2b
./folder2/folder2a
./folder3
./folder3/folder3a
./folder3/folder3b

Yo estaba esperando

./folder2
./folder2/folder2b
./folder2/folder2a
./folder3
./folder3/folder3a
./folder3/folder3b

¿El resultado inicial a continuación es el del primer comando de búsqueda?

.
./folder2
./folder3

Pensé que la salida del primer comando de búsqueda se canalizaba como parámetros a la segunda búsqueda y no debería generarse. ¿De dónde viene la primera parte del resultado?

Respuesta1

find . -type d -maxdepth 1tendrá .en su salida (el directorio actual), ya que es un directorio y tiene una profundidad menor que 1. Por lo tanto, volverá a ejecutar finda .través de xargs, que es como obtiene la salida adicional. Probablemente -mindepth 1también quieras para el primer comando:

$ find . -maxdepth 1 -mindepth 1 -type d | xargs -I{} find {} -type d -maxdepth 1 | xargs -I{} echo {}
./folder2
./folder2/folder2b
./folder2/folder2a
./folder3
./folder3/folder3a
./folder3/folder3b

información relacionada