Se você precisar renomear arquivos também em subdiretórios e o seu find
suporte ao -execdir
predicado, poderá fazer
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Obrigado a @glenn jackman por sugerir uma -depth
opção find
e me fazer pensar.
Observe que em alguns sistemas (incluindo os GNU / Linux), find
pode não conseguir encontrar arquivos cujo nome contenha espaços e também sequências de bytes que não formam caracteres válidos (normalmente, com arquivos de mídia com nomes com caracteres não ASCII codificados em um conjunto de caracteres diferente da localidade). Definir o código do idioma para C
(como em LC_ALL=C find...
) resolveria o problema.
find -maxdepth 1
para fazer exatamente o que o OP pediu sobre como operar na pasta atual.-depth
opção find e você poderá se livrar dosort
.-name '* *'
para-name '*_*'
e mude"${1// /_}"
para"${1//_/.}"
bash
página do manual.Em qualquer shell, você pode fazer um loop sobre os arquivos cujo nome contém um espaço. Substituir os espaços por sublinhados é fácil no bash, ksh e zsh pela
${VARIABLE//PATTERN/REPLACEMENT}
construção.No Debian, Ubuntu e derivados, você pode usar o Perl
rename
(outras distribuições oferecem um programa diferenterename
, e esse programa não é útil aqui).Uma solução zsh obrigatória:
Uma solução POSIX obrigatória:
fonte
s/…/…/g
significa substituir todas as ocorrências. Não está muito bem explicado no manual . Se você quiser renomear diretórios, existem várias maneiras, procure-o (acho que já vi isso antes) e se você não conseguir encontrá-lo, faça uma nova pergunta._MG_blah.JPG
paraIMG_blah.JPG
.Você pode usar
rename
para isso (aqui assumindo o deutil-linux
, nãoperl
aquele):Isso encontrará todo o espaço de arquivos e diretórios no nome e substituirá o espaço por um sublinhado. Como ele usa a correspondência de arquivos glob, você precisa estar no diretório certo para começar.
Se você deseja fazer correspondências recursivas, é possível, mas pode ser necessário executar
rename
algumas vezes para capturar quaisquer itens nos diretórios que foram renomeados:fonte
rename
Renomeará os arquivos especificados substituindo a primeira ocorrência de from em seu nome por para ”. Portanto, isso funcionará apenas para arquivos com um único espaço em seu nome. (Você pode ligarrename
em loop, mas não é realmente a ferramenta certa aqui.)Outra opção seria
mmv
, se instalado.fonte
_
, não funciona nomes com vários espaços.No Debian / Ubuntu, com base nas respostas de Caleb e Gilles, foi o que funcionou para mim renomear arquivos recursivamente:
Nota: Para visualizar quais arquivos seriam renomeados e como, use a
-n
opção comrename
:Outra nota: definindo
globstar
marcas**
corresponder arquivos em todos os subdiretórios, de modo que apenas o diretório atual é desejada, não globstar conjunto ou usar*
, em vez de**
.Mais uma observação: O
rename
comando precisa ser executado mais de uma vez para arquivos com várias ocorrências do termo de pesquisa.fonte
a b/c d
paraa_b/c_d
não funcionaria, você precisaria primeiro renomeara b/c d
paraa b/c_d
e depoisa b
paraa_b
).rename
comando duas vezes?**
exclui arquivos de ponto e percorre links simbólicos.Se você não é um flash em expressões regulares (eu não sou!) E pode executar aplicativos projetados para o kde (você usa o kde - k desktop ou possui suas bibliotecas instaladas), o krename é um ótimo utilitário gráfico que permite ver o antes e o depois antes de se comprometer com as alterações. Ele tem várias transformações simples como opções e também suporta expressões regulares. Você pode até combinar várias transformações seqüenciais em uma única renomeação para não precisar projetar uma única transformação complexa que faça tudo de uma vez. Ele também tem uma opção para continuar renomeando os mesmos arquivos após a aplicação de uma renomeação.
Não o uso com tanta frequência, mas quando o faço, ele realmente realiza o trabalho com rapidez e facilidade. É realmente útil ao renomear vários arquivos de mídia baixados, para que você possa gerenciá-los uniformemente em seu sistema. Ajuda a baixar o manual do krename separadamente, para que você possa consultá-lo enquanto estiver usando o programa.
http://www.krename.net/
fonte