Linux - Substituir espaços nos nomes de arquivo
Pergunta
Eu tenho um número de arquivos em uma pasta, e eu quero substituir cada caractere de espaço em todos os nomes de arquivo com sublinhados. Como posso conseguir isso?
Solução
Isso deve fazê-lo:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Outras dicas
Eu prefiro usar o comando 'renomeação', que leva expressões regulares Perl-style:
rename "s/ /_/g" *
Você pode fazer uma seca correr com a bandeira -n:
rename -n "s/ /_/g" *
Use sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Se você quiser tentar fazer isso antes de puxar o gatilho apenas mudança mv
para echo mv
.
E se você deseja aplicar a tarefa de substituir recursivamente ? Como você faria isso?
Bem, eu só encontrei a resposta sozinho. Sem a solução mais elegante (tentativas para mudar o nome também arquivos que não cumprem a condição), mas obras. (Aliás, no meu caso eu precisava para renomear os arquivos com '% 20', não com um sublinhado)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
Se você usar bash:
for file in *; do mv "$file" ${file// /_}; done
orçamento Sua variáveis:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Remova o "eco" para fazer a mudança de nome real.
Tente algo parecido com isto, assumindo que todos os seus arquivos foram .txt de:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
A maneira mais fácil de substituir uma string (caractere de espaço no seu caso) com outra string em Linux
está usando sed
. Você pode fazê-lo da seguinte maneira
sed -i 's/\s/_/g' *
Espero que isso ajude.
Aqui está uma outra solução:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- usos awk para adicionar aspas em torno do nome do arquivo
- usa sed para substituir o espaço com sublinhados; imprime o nome original com citações (de awk); então o nome substituído
- xargs leva 2 linhas de cada vez e passa para mv
Acredito que sua resposta está no Substituir espaços em nomes de arquivos com sublinhados .
Para renomear todos os arquivos com um uso de extensão .py
,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Exemplo de saída,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py