Como executar dois comandos em um achado

0

Eu gostaria de

  1. encontrar pastas específicas
  2. ecoar seu nome
  3. ls -l seu conteúdo

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

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, pois tem problemas com nomes de arquivos de escape corretamente.

hyperknot
fonte

Respostas:

1

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

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
Daniel Vérité
fonte
0

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

sudo find / -tipo 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 procura 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 o echo jsut no primeiro execdir não lhe escreveria o caminho completo, mas apenas o último diretório, que pode não ser suficiente.

fede.evol
fonte
0

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

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

Por exemplo,

  1. encontrar pastas bin
  2. ecoar seu nome ou imprimir seus nomes
  3. ls -l seu conteúdo - lista seu conteúdo.
dexterous_stranger
fonte