Eu tenho muitos arquivos em uma pasta e quero adicionar prefixo ou sufixo (não os dois ) a eles. Eu verifiquei aqui e descobri que posso usar
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
para adicionar um prefixo a todos os arquivos terminados em .jpg
(e se eu remover o .jpg
, ele adicionará o prefixo a todos os arquivos na pasta atual).
No entanto, eu gostaria de poder
- Adicione um sufixo (ou seja, renomeie
filename.ext
parafilename.whatever.ext
), - Verifique se o prefixo ou sufixo já está presente e pule,
- Crie um alias que aceite argumentos como
addprefix whatever *.ext
ouaddsufix whatever *.*
shell
shell-script
rename
Aquele cara brasileiro
fonte
fonte
if [ $f == $prefix* ]
e você pode alterar o sufixo comif [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]
os comandos mv do casal no opensuffix. Para (2) ele já deve funcionar em arquivos sem extensão, a menos que eu seja um programador horrível.Há um comando Perl
rename
que deve fazer o truque. Cuidado, porém: existem vários comandos diferentes chamadosrename
, portanto, certifique-se de ter o script Perl que esperaperlexpr
como argumento. Este é orename
comando fornecido peloperl
pacote no Debian e derivados (Ubuntu, Mint,…), mas não em outras distribuições que possam ter um utilitário diferente chamadorename
.Como você pode ver, é idempotente - ele não adicionará o prefixo novamente quando você o chamar várias vezes.
Ele funciona substituindo o início (comprimento zero) das strings (
^
) ou o start seguido por umaprefix
string opcional porprefix
.Vou deixar encapsular isso em um script de shell ou em uma função de shell como um exercício para você :)
O Postfix é um pouco mais difícil, porque você precisa descobrir qual parte do nome do arquivo constitui a extensão ...
fonte
rename
estar presente tanto o perl quanto esse específico (ou equivalente) . E eu sei que os sufixos são um pouco mais difíceis, não foram abordados na questão vinculada, e eu sou iniciante em linux, bash, shell script, perl e expressões regulares, então "um pouco mais difícil" é bastante difícil para mim ! :)Com
zsh
:~
é o operador de globbing que significa exceto inzsh
.fonte
Exemplo simples para alterar o prefixo e a extensão de todas as imagens na pasta atual.
Se você quiser verificar como isso afetaria seus dados antes de alterá-los, substitua o mv pelo eco
a saída para IMG_7993.JPG é EG_IMG_7993.jpg
fonte