Como substituir espaços em branco em um nome de arquivo?


8

Eu tentei da seguinte maneira:

rename 'bla bla .txt' blabla.txt

Mas isso não funciona, qual é a sintaxe correta para este caso?

Respostas:


15

Você não deve usar renamepara renomear apenas um arquivo, use mv(1) .

Além disso, para escapar do espaço em branco, prefixe-o com um \:

"Ubuntu One" → Ubuntu\ One

Seu comando seria

mv bla\ bla.txt blabla.txt
  • a barra invertida informa ao bash que o próximo caractere é de alguma forma especial, por exemplo, \apara 'bell', \para um espaço literal e assim por diante

    veja man ascii(7) para mais

Como alternativa, como agora você está usando o comando correto mv, pode citar o nome do arquivo se houver muitos espaços:

mv "bla    bla.txt" blabla.txt

(Isso seria bla\ \ \ \ bla.txtem forma de escape)

  • No bash, as seqüências de caracteres entre aspas (aspas simples ou duplas) são tratadas como um único argumento, enquanto as seqüências de caracteres sem aspas serão divididas em vários argumentos, como este:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    e mvespera:

    • ["mv", "source", "destination", ]
  • Nota: digitar 'mv' e os primeiros caracteres do nome do arquivo e pressionar TABdará a versão escapada do nome do arquivo, tornando a renomeação rápida e fácil.


renameé usado para processar em lote a renomeação de arquivos usando expressão regular, conforme demonstrado no exemplo em sua página de manual :

rename 's/\.bak$//' *.bak

Para remover qualquer ocorrência de .bak (no final da string [$]) de todos os arquivos correspondentes a "* .bak".


obrigado, como ficaria o comando se houver muitos espaços em branco no nome do arquivo de origem? existe um regex simples para que não haja necessidade de escapar de todos os espaços em branco?
— NES

Atualizada a resposta para tratar de muitos espaços e aspas simples v.
— Stefano Palazzo

Há uma diferença entre aspas simples e duplas, mas isso não preocupa esse problema. Veja este artigo para os detalhes exatos
— Stefano Palazzo

4

renomear é um comando especializado para renomear em massa. Sem querer, o que normalmente chamamos de "renomear" é na verdade uma "mudança" para um novo nome:

mv 'bla bla .txt' blabla.txt

qual é a diferença entre escrever o nome do arquivo entre aspas simples e aspas duplas?
— NES

4
A citação dupla permite que variáveis ​​sejam expandidas e para substituição de processos; citação única não. A=bla ; mv "$A $A .txt" blabla.txtmoverá bla bla .txt, mas A=bla ; mv '$A $A .txt' blabla.txtprocurará um arquivo chamado "$ A $ A .txt". Qualquer um deles funcionará para o seu exemplo.
— frabjous

1
rename "s/\s//g" "bla bla.txt"

s é o comando substit substit.

\ s é para whiteSpace

Você está substituindo por nada. A outra seqüência de substituição passa depois da segunda barra.

g é para Global, ou seja, substitua todas as instâncias. A omissão de g substitui apenas a primeira instância.


Este comando substituirá o espaço em branco pelo sublinhado em todos os arquivos:

rename "s/\s/_/g" *
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.