substitui um caractere 'space' no nome do arquivo por um sublinhado

3

Eu tenho um monte de arquivos em um diretório com 'espaços' no nome do arquivo.

Como faço para renomear em massa todos os nomes de arquivos com 'espaços' e substituí-los por um caractere '_'.

Olhando para as outras soluções, tentei o seguinte comando sem sucesso:

find . -name '* *' -exec rename ' ' '_' {} +

find: rename: não existe esse arquivo ou diretório

    
por user38730 16.04.2010 / 10:12

3 respostas

3

Tente:

$ for file in *; do [ -f "$file" ] && ( mv "$file" "$(echo $file | sed -e 's/ /_/g')" ); done
    
por 16.04.2010 / 10:17
1

Não há resposta direta, mas a maioria das pessoas vai errar de uma forma ou de outra. Provavelmente, eles não usarão o find corretamente, e você poderá obter resultados estúpidos se qualquer nome de arquivo contiver um ^ J.

Além disso, se você tiver / lotes / de arquivos, provavelmente não desejará que seu script crie um sed ou mv para cada entrada.

Aqui está uma maneira de fazer isso corretamente com o Perl básico:

find . -print0 | \
  perl -e '$/="
find . -print0 | \
  perl -e '$/="%pre%0";' -ne '$o=$_;tr/ /_/;rename($o,$_);'
0";' -ne '$o=$_;tr/ /_/;rename($o,$_);'
    
por 16.04.2010 / 12:01
1

Obrigado pelas respostas.

Eu encontrei este forro que fez o truque:

for i in *\ *; do if [ -f "$i" ]; then mv "$i" ${i// /_}; fi; done
    
por 16.04.2010 / 19:48

Tags