Explicando a saída xargs de dois comandos find

Explicando a saída xargs de dois comandos find

Eu tenho uma estrutura de diretórios de

  • pasta1
    • pasta2
      • pasta2a
      • pasta2b
    • pasta3
      • pasta3a
      • pasta3b

Estou confuso com a saída xargs do comando abaixo:

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

eu estava esperando

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

A saída inicial abaixo é do primeiro comando find?

.
./folder2
./folder3

Achei que a saída do primeiro comando find estava sendo canalizada como parâmetros para o segundo find e não deveria ser gerada. De onde vem a primeira parte da saída?

Responder1

find . -type d -maxdepth 1terá .em sua saída (o diretório atual), já que é um diretório e tem profundidade menor que 1. Então você estará executando findnovamente .via xargs, que é como você obtém a saída extra. Você provavelmente -mindepth 1também deseja o primeiro 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

informação relacionada