Como conseguir encontrar -exec para chamar um script de shell?

2

Tomando a partir da última resposta (por im3r3k) aqui: Como recursivamente fragmentar uma árvore de diretórios inteira?

Estou tentando obter o comando find para chamar um script de shell conforme descrito.

Até agora eu tentei:

find /home/shredtest/* -depth -exec /home/test.sh {}\;

onde /home/shredtest é o diretório cujo conteúdo eu quero destruir (mas sem remover /home/shredtest e onde /home/test.sh é o script a ser executado. Eu usei chmod +x /home/test.sh .

O comando find acima retorna:

find: -exec CMD must end by ';'

Eu também tentei:

find /home/shredtest/* -depth -exec /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec /home/test.sh {}\;
find /home/shredtest/* -depth -exec sh /home/test.sh "{}"\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh {}\;
find /home/shredtest/* -depth -exec sh \/home\/test.sh "{}"\;

todos os quais retornam o mesmo erro.

Então:

  1. Por que o -exec não consegue ver o ponto-e-vírgula? Obviamente está lá e escapou para que algo mais esteja errado. Eu simplesmente não vejo isso.
  2. Eu estou indo sobre isso da maneira certa ou existe uma maneira melhor de conseguir isso?
por JoelAZ 04.07.2014 / 06:36

1 resposta

6

O ; tem que ser seu próprio argumento separado para find :

find /home/shredtest/ -depth -exec /home/test.sh "{}" \;

(observe o espaço entre {} e \; ). Depois de -exec :

All following arguments to find are taken to be arguments to the command until an argument consisting of ';' is encountered.

(de man find ). Ou seja, o argumento deve consistir em inteiramente de ; para parar a lista de argumentos.

Você também pode usar '+' para passar muitos argumentos de arquivo de uma vez, o que também deve ser seu próprio argumento.

Note também que em find /home/shredtest/* o * é desnecessário: find irá percorrer o próprio conteúdo do diretório, enquanto * será expandido pelo shell (e ocasionalmente pode não levar exatamente aos resultados que você queria ).

    
por 04.07.2014 / 06:38