Eu quero executar um comando para:
- Encontre todos os diretórios chamados "
inc
" em uma pasta "X
". - Liste todos os subdiretórios em cada "
X/.../inc/
". - Redirecione a saída para um arquivo chamado "
list
"
Eu tentei várias combinações do comando abaixo, sem sucesso:
$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression
Como posso fazer isso?
linux
command-line
find
iammilind
fonte
fonte
Aqui está uma lista prática:
É executado
find
em cada um dos primeirosfind
resultados. Aexec
opção também pode receber um comando shell mínimo, no qual - como eu disse -{}
é substituído por cada diretório do primeirofind
.O segundo
find
, por sua solicitação, "listará todos os subdiretórios" dos primeiros resultados, incluindo oinc
diretório. Se você não quer que se na saída, deixe o segundofind
, pelo menos, pastas de saída de profundidade 1.Vamos então redirecionar o comando
stdout
paralist
.fonte
find path -name inc -type d -exec sh -c 'find {} -mindepth 1 -maxdepth 1 -type d' \;
Tudo bem, eu encontrei a resposta para simular essa descoberta aninhada:
fonte
find X/ -type d -print0 | awk 'BEGIN{RS="\0"}/\/inc\//' > list
(grep -z
também delimita o caractere nulo, mas sua saída também parece ser nula, portanto, seria necessário canalizá-lo, por exemplo,xargs -0L1 echo
para obtê-lo linha por linha ) Nesse caso, como você salva a lista em um arquivo com todas as entradas separadas por nova linha, as novas linhas nos nomes dos arquivos ainda serão representadas de forma ambígua. Talvez você nem precise do arquivo intermediário, dependendo do que deseja fazer com a lista.Tente o seguinte:
fonte
"\inc\"
:)-path
flag