Renomeia recursivamente todos os arquivos cujo nome começa com um traço

4

No terminal, posso renomear um único arquivo que comece com um traço, ou seja,

mv ./-file file

Eu também posso renomear todos os arquivos em um diretório que comece com um traço, ou seja,

for f in ./-*; do rename 's/-//' "$f"; done

No entanto, como posso fazer isso de forma recursiva? Eu tentei usar o comando find , o comando rename e um loop for recursivo. By the way, muitos dos nomes de arquivos têm mais de um traço. Eu só quero remover o primeiro traço. Obrigado!

    
por jbrock 13.02.2017 / 03:11

1 resposta

9

Usando find e rename :

find . -iname '-*' -execdir rename -n 's:./-:./:' {} +

find . -iname '-*' corresponde a todos os nomes de arquivos que começam com - e, em seguida, -execdir ... {} + executa o comando com esses nomes como argumentos, após cd ing para o diretório que contém os arquivos. Isso significa que os argumentos de comando sempre possuem nomes de arquivos na forma ./-foo . Então é fácil combinar apenas o - após o ./ em um regex.

    
por muru 13.02.2017 / 03:19