Como executar dois comandos em um achado

0

Eu gostaria de

  1. encontre pastas específicas
  2. ecoa o nome deles
  3. ls -l seus conteúdos

Meu problema é que eu não sei como combinar um echo {} e um ls -l {} em um comando find.

linha para eco:

sudo find / -type d -name 'yt' -exec echo {} \;

linha para ls:

sudo find / -type d -name 'yt' -exec ls -l {} \;

Como posso combinar esses dois?

nota: Eu prefiro não usar xargs se possível, já que tem problemas em escapar nomes de arquivos corretamente.

    
por hyperknot 25.02.2014 / 14:18

3 respostas

1

Por que não colocar duas opções -exec diferentes no mesmo comando find ?

Isso funciona para mim:

$ find --version
find (GNU findutils) 4.4.2
$ find . -type d -name mydir -exec echo {} \; -exec ls -l {} \;
./mydir
total 0
-rw-rw-r-- 1 daniel daniel 0 févr. 25 15:32 myfile
    
por 25.02.2014 / 15:35
0

Esta não é uma solução genérica, mas funcionará para você desde que você pesquise diretórios:

sudo find / -type d -name 'yt' -execdir readlink -f {} \; -exec ls -l {} \;

O execdir executa um comando no subdiretório que corresponde ao arquivo encontrado (que, desde a busca dos diretórios), é o próprio diretório (e o readlink -f fornece o caminho completo). O segundo -exec do outro lado corresponderá ao diretório novamente e fará o "ls -" neles.

Usar jsut echo no primeiro execdir não lhe escreveria o caminho completo, mas apenas o último diretório que pode não ser suficiente.

    
por 25.02.2014 / 14:23
0

Você pode usar o comando de impressão aqui facilmente.

$sudo find / -type d -name 'bin' -print  -exec ls -l {} \;

Por exemplo,

  1. encontre pastas bin
  2. ecoa o nome ou imprime seus nomes
  3. ls -l seu conteúdo - lista seu conteúdo.
por 03.03.2014 / 14:13