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?

NES
fonte

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".

Stefano Palazzo
fonte
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
ændrük
fonte
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" *
Nissim Nanach
fonte