Converter ordem para localizar… -exec

4

Eu quero renomear arquivos e diretórios. Vamos supor que eu queira converter cada ä para a e eu tenho Järjestelmä/Säätimet . Então eu digo algo como find -exec rename 's/ä/a/g' . Agora, find converterá Järjestelmä para Jarjestelma e depois reclamará que não encontrou mais Järjestelmä .

Se eu pudesse converter a ordem de exec -commands para executar, isso resolveria isso. É possível? Se não, qual é o jeito certo de fazer isso?

Este não é um grande problema, pois posso executar o comando novamente até que ele não faça alterações. De qualquer forma isso me irrita.

    
por Jori Mäntysalo 18.03.2016 / 09:24

1 resposta

4

Use a opção find do -depth , na página man:

-depth Process each directory's contents before the  directory  itself.
          The -delete action also implies -depth.

Dessa forma, ele processará Säätimet antes de Järjestelmä e não se queixará de não poder entrar em Järjestelmä porque você acabou de renomeá-lo.

Para evitar rename de manipular todo o caminho use -execdir presente em algumas implementações de find como BSDs e GNU (que muda para o diretório e entrega apenas a parte final ao argumento de comando {} (com um prefixo ./ com algumas implementações)):

mkdir Järjestelmä
touch Järjestelmä/Säätimet
find . -depth -execdir rename 's/ä/a/g' {} \;
find .

dá:

./Jarjestelma
./Jarjestelma/Saatimet
    
por 18.03.2016 / 09:32

Tags