Como faço mv original.filename new.original.filename
sem redigitar o nome do arquivo original?
Eu imaginaria ser capaz de fazer algo parecido mv -p=new. original.filename
ou talvez mv original.filename new.~
ou o que seja - mas não consigo ver nada assim depois de olhar para man mv
/ info mv
pages.
Claro, eu poderia escrever um script de shell para fazer isso, mas não existe um comando / sinalizador existente para ele?
Você pode usar o
rename(1)
comando:Editar: Se
rename
não estiver disponível e você precisar renomear mais de um arquivo, o script de shell pode ser realmente curto e simples para isso. Por exemplo, para renomear todos*.jpg
paraprefix_*.jpg
no diretório atual:fonte
rename 's/(.*).example/$1/' *.example
me salvou do tédio.$
neste cenário. Então's/(.*)/new.$1/'
rename
comando não funciona em minha máquina RHEL 6. Existem versões diferentes deste comando? Ofor ... done
funcionou para mim.Você pode obter uma renomeação de vários arquivos compatível com Unix (usando curingas) criando um loop for:
fonte
${file%%}
fazer? Parece semelhante a simplesmente $ {file}Já vi pessoas mencionarem um
rename
comando, mas ele não está rotineiramente disponível em sistemas Unix (ao contrário de sistemas Linux, digamos, ou Cygwin - em ambos, renomear é um executável em vez de um script). Essa versão dorename
tem uma funcionalidade bastante limitada:Ele substitui o de parte dos nomes de arquivos com o que , e o exemplo dado na página do manual é:
Isso renomeia foo1 para foo01 e foo10 para foo010, etc.
Eu uso um script Perl chamado
rename
, que originalmente tirei da primeira edição do livro Camel, por volta de 1992, e depois estendi, para renomear arquivos.Isso permite que você escreva qualquer substituto Perl ou comando de transliteração para mapear nomes de arquivo. No exemplo específico solicitado, você usaria:
fonte
pacman
usando:pacman -Sy perl-rename
. Em seguida, adicione um alias a ele em seu bashrc:alias rename='perl-rename'
'.html
aos nomes dos arquivos, use's/$/.html/'
- para removertmp
de qualquer lugar nos nomes dos arquivos, use's/tmp//g'
(localizartmp
e substituir por nada em todos os lugares).A maneira mais fácil de renomear arquivos em massa no diretório é:
fonte
Se estiver aberto a uma modificação, você pode usar um sufixo em vez de um prefixo. Depois, você pode usar o preenchimento com tabulação para obter o nome do arquivo original e adicionar o sufixo.
Caso contrário, não, isso não é algo compatível com o comando mv. Um script de shell simples pode lidar, no entanto.
fonte
No meu caso, tenho um grupo de arquivos que precisa ser renomeado antes de poder trabalhar com eles. Cada arquivo tem sua própria função no grupo e seu próprio padrão.
Como resultado, tenho uma lista de comandos de renomeação como esta:
Experimente também:
Isso produzirá todas as combinações com prefixos e sufixos:
Outra maneira de resolver o mesmo problema é criar uma matriz de mapeamento e adicionar o prefixo corpondent para cada tipo de arquivo, conforme mostrado abaixo:
fonte
Renomear arquivos em massa script bash
fonte
Eu sei que há ótimas respostas aqui, mas não encontrei nenhuma referência para lidar com extensões de nome de arquivo ao adicionar sufixo.
Eu precisava adicionar o sufixo '_en' a todos
wav
arquivos em uma pasta antes da extensão do arquivo.A magia está aqui:
%.*
for filename in *.wav; do mv $filename ${filename%.*}_en.wav; done;
Se você precisar lidar com diferentes extensões de arquivo, verifique esta resposta. Um pouco menos intuitivo.
fonte