Remover espaços em branco em nomes de arquivos

Publicado por Fernando T. Da Silva (última atualização em 27/05/2013)

[ Hits: 26.977 ]

Homepage: http://meumundotux.blogspot.com.br/

Download semespaco




Nome do script: semespaco

Este script facilita muito a eliminação de espaços em branco nos nomes de arquivos, para que estes arquivos possam ser utilizados por outros comandos que não aceitam espaços em branco em nomes de arquivos, como o comando gs e outros comandos.

Notas:

Este script é muito bom e seguro para eliminar o espaço em branco do nomes de arquivos, pois é aplicado somente ao arquivo especificado, outros comandos para a mesma finalidade costumam eliminar os espaços em branco de todos os nomes de arquivos, sem exceção e até de subdiretórios.

Ele facilita muito a vida de quem costuma imprimir páginas HTML em PDF utilizando a extensão PrintPDF para Firefox, pois pode-se reduzir o arquivo PDF gerado para que fique bem menor utilizando o comando gs (que não aceita arquivos com espaços em branco no nome).

Truque

Com este script você pode eliminar os espaços em branco dentro de qualquer gerenciador de arquivos sem precisar usar janela de terminal, basta que o mesmo tenha a opção "Abrir com...". Basta selecionar esta opção e escolher outro aplicativo, desmarque a opção "Usar como padrão" ou "Associar" caso tenha essas duas últimas opções, digite semespaco e clique em OK, e pronto os espaços do nome do arquivo serão substituídos pelo caractere sublinhado.
Obs.: este procedimento não funciona com pastas dentro do gerenciador de arquivos.

  



Esconder código-fonte

# Script para remover espaço em branco em nomes de arquivo, substituindo os espaços pelo
# caractere sublinhado.
# Funciona apenas com um arquivo por vez ou diretório devido ao script.
# Não funciona corretamente com caractere curinga, como *.txt devido a variavel $1.
# O arquivo com espaço no nome deve ser especificado entre aspas duplas.
# Exemplo: semespaco  "Teste de qualidade.doc"
# resultado: Teste_de_qualidade.doc
# O comando renome faz parte do sistema, encontrado nas distros ubuntu.
#
# Para remover os espaços de vários arquivos, usando curinga, usar diretamente
# no terminal: rename -v 'y/ /_/' *.txt
#
#
rename -v 'y/ /_/' "$1"

Scripts recomendados

Bloquear contas em servidor Zimbra após 45 dias

SImples calculadora em Shell

Alterar Data e Hora do Sistema

Nmap,traceroute,ssh,ftp e nbtscan, tudo junto nesse script basicão.

Agendamento de compromissos com avisos baseados no horário


  

Comentários
[1] Comentário enviado por phoemur em 29/05/2013 - 10:28h

Para renomear diversos arquivos você pode usar um loop, tipo assim:

$ ls -w1 *.txt | while read line; do mv "$line" "$(echo $line | tr '\ ' '_')"; done

pra entrar também nas subpastas você teria que trocar o ls pelo find...

O rename é legal, usa a mesma sintaxe regex do sed, mas dá pra se virar bem sem ele se precisar...

[2] Comentário enviado por nandosilva em 29/05/2013 - 20:45h

Valeu pela sua dica phoemur.
$ ls -w1 *.txt | while read line; do mv "$line" "$(echo $line | tr '\ ' '_')"; done

[3] Comentário enviado por luizsouza99 em 22/06/2014 - 18:07h

Ajudou mais um, o mv não funcionava de jeito nenhum

o meu script dava muitos erros por causa dos espaços nos nomes

fiz um script que lista arquivos e diretórios do meu pc e joga esta lista pro dropbox, assim se o hd der pau eu sei o que baixar novamente

valew

[4] Comentário enviado por alexandre08rj em 27/11/2015 - 17:01h


Seria muito mais fácil com o comando tr -d ' ' <arquivo>

[5] Comentário enviado por leojaco25 em 05/07/2016 - 17:32h

Pessoal, boa tarde.

Tenho um problema com alguns arquivos. Estou fazendo o mv com o "find /diretório -mtime +9 |while read file". Contudo, os arquivos possuem a seguinte nomenclatura "999999 (diamesano-cepini-cepfim).zip". Testei renomear, tirando o " " e os parenteses, porém o processo não funciona. Se uso o "|tr", dá o erro "tr: when not truncating set1, string2 must be non-empty". Se uso o "rename", não dá nenhum erro, mas também não renomea. Segue o script que fiz para testar:
----------------------------------------------------------
find /tmp/*.zip -mtime +1 |while read line
do
echo $line
rename -v 'y/ /_/' 'y/\(//' 'y/\)//' "$line"
done
----------------------------------------------------------
Mesmo se eu uso somente "rename -v 'y/\ /_/' "$line" nada acontece. Alguém tem alguma sugestão? Preciso tirar o espaço e os parênteses do nome dos arquivos.

Att.:
Leandro.

[6] Comentário enviado por goll72 em 20/12/2020 - 20:48h

Há algum programa CLI que não aceita espaços em nome de arquivos? Se você utilizar aspas ao redor do nome (ex. ls "./diretório 1") ou se usar a backslash para "escapar" os espaços (ex. ls ./diretório\ 1) o nome será interpretado da forma correta.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts