Diretório e subdiretório Renomear caracteres especiais de comando em nomes de arquivos

0

Eu gostaria de remover []-_" etc. de vários nomes de arquivos que estão situados em subdiretórios diferentes.

Encontrou isto

rename "s/\[|\]/_/g" * 

mas está funcionando apenas em um subdiretório específico e não em outros arquivos que estão em outro lugar

Existe uma maneira de fazer isso?

    
por Boris Cohaniuc 10.08.2017 / 01:11

1 resposta

1

Se você deseja aplicar a renomeação recursivamente a todos os arquivos na hierarquia de diretórios em seu diretório de trabalho atual, é possível usar o recurso globstar do Bash. Você precisa ativar isso primeiro. Digite o seguinte:

shopt -s globstar
rename "s/\[|\]/_/g" **

Em outras palavras, para ativar o recurso globstar , você pode executar o comando com duas estrelas ( ** ) em vez de apenas uma ( * ). Isso corresponderá a todos os arquivos na hierarquia de diretórios no diretório de trabalho atual, ou seja, independentemente de quão profundamente eles estão aninhados no diretório de trabalho atual.

Se você quiser renomear todos os arquivos no diretório de trabalho atual sem o risco de renomear nomes de diretórios correspondentes, use find :

find . -type f -execdir rename -- 's/\[|\]/_/g' {} +

Isso corresponderá a todos os arquivos contendo os caracteres [ ou ] em qualquer lugar na estrutura de diretórios em seu diretório de trabalho atual e executará sua rotina de renomeação nos subdiretórios que contiverem arquivos correspondentes. / p>     

por Malte Skoruppa 10.08.2017 / 01:41