Eu nomeei vários arquivos com espaços neles e quero substituir o espaço por _
. No entanto, toda vez que escrevo um comando no shell com o nome do arquivo (por exemplo Spring 2011
), o shell não reconhece o arquivo ou o diretório.
O que é que eu posso fazer sobre isto? Existe alguma maneira de usar o caractere unicode para um espaço?
bash
loop for: veja minha solução aqui .Respostas:
Escape do espaço, por exemplo
Spring\ 2011
, ou use aspas, por exemplo'Spring 2011'
. No futuro, normalmente é uma má idéia usar nomes de arquivos com espaços em qualquer * NIX.Se você tiver
rename
, você pode usar isto:fonte
rename
a versão 2.23)Se sua máquina tiver o comando rename , isso mudará todos os espaços para sublinhados em todos os arquivos / diretórios no diretório de trabalho atual:
fonte
rename --version
rename from util-linux 2.23.2
.Se você não possui
rename
ou prefere usar apenas o shell:Quebrado:
*\ *
seleciona todos os arquivos com um espaço em seu nome como entrada para ofor
loop."$f"
são importantes porque sabemos que há um espaço no nome do arquivo e, caso contrário, ele apareceria com mais de 2 argumentos paramv
.${f//str/new_str}
é um recurso de substituição de string específico do bash. Todas as instâncias destr
são substituídas pornew_str
.fonte
for f in *\ *; do mv "$f" "${f// /_}"; done
ele funcionamv "Spring 2011.file" Spring_2011.file
deve informar a linha de comando para usar a string entre aspas como uma única entrada.fonte
Para renomear programaticamente N arquivos, você pode usar um
bash
loop for simples .Se você tiver menos de 5 nomes de arquivos, poderá digitar manualmente todos os nomes de arquivos e usar o
rename
comando como a solução acima sugere. Mas para mim ... eu prefiro a solução programática ... mesmo quando há apenas 4 arquivos.ps
se você não estiver familiarizado com
Bash
a expansão de parâmetro (ou seja${filename// /_}
), poderá usar orename
comando:fonte