Linux renomeando arquivos para adicionar _00 depois do nome do arquivo antes da extensão

1

O que eu estou perdendo aqui, isso parece tão simples, mas eu não consigo fazer isso funcionar.

Eu tenho um diretório com arquivos como AGPNDRAH01.jpg

Eu quero um diretório com arquivos como AGPNDRAH01_00.jpg

rename 's/(\w+).jpg\\_00.jpg$//' *

Não funciona. Centos linux. Não faz sentido para mim porque isso não está funcionando.

    
por Mech Software 24.03.2010 / 19:25

5 respostas

4

Quick hack que fará o que você descreve no bash:

cd /directory
for F in 'ls -1 |awk -F. '{print $2}''
do
  mv $F.jpg ${F}_00.jpg
done

Para renomear o uso:

wmoore@bitbucket(/tmp/dowork)$ ls -1
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
wmoore@bitbucket(/tmp/dowork)$ rename .jpg _00.jpg *.jpg
wmoore@bitbucket(/tmp/dowork)$ ls -1
1_00.jpg
2_00.jpg
3_00.jpg
4_00.jpg
5_00.jpg
    
por 24.03.2010 / 19:36
2

Experimente o seguinte script:

find . -type f -name "*.jpg" -print | while read FILE  
  do mv "${FILE}" "'dirname ${FILE}'/'basename ${FILE} .jpg'_00.jpg"
  done

Isso encontrará todos os arquivos .jpg no diretório atual ou abaixo dele e insira _00 antes de .jpg . Se você quer apenas que ele manipule o diretório atual, inicie o comando find com find . -maxdepth 1

    
por 24.03.2010 / 19:39
0

Não estou familiarizado com a renomeação, mas o seu regex não parece correto. Parece que você está tentando corresponder arquivos com o nome AGPNDRAH01.jpg.AGPNDRAH01_00.jpg e alterar seu nome para nada.

Tem certeza de que não quer dizer algo assim?

rename 's/(\w+).jpg$/\\_00.jpg/' *
    
por 24.03.2010 / 19:34
0

Eu tenho uma variante de redhat, e renomear não suporta o comando 's /'. Aqui está um verso para você (você tem que usar parênteses e sinais de adição para obter a funcionalidade no sed):

for fl in *.jpg; do mv $fl 'echo $fl | sed 's/\(\w\+\).jpg/_00.jpg/''; done
    
por 24.03.2010 / 19:49
0

Você acabou de ter uma barra no lugar errado e uma barra invertida desnecessária.

rename 's/(\w+).jpg/$1\_00.jpg/' *
    
por 24.03.2010 / 20:51