Renomeie os arquivos na pasta local incluindo um prefixo ou sufixo

12

Eu tenho muitos arquivos em uma pasta e quero adicionar um prefixo ou um sufixo (não ambos ) 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 da pasta atual).

No entanto, gostaria de poder

  • Adicione um sufixo (ou seja, renomeie filename.ext para filename.whatever.ext ),
  • Verifique se o prefixo ou sufixo já está presente e pule,
  • Crie um alias que aceite argumentos como addprefix whatever *.ext ou addsufix whatever *.*
por That Brazilian Guy 19.09.2013 / 23:52

4 respostas

10

Se você estiver usando bash , essa linha única pode fazer isso por você (supondo que você tenha as variáveis $prefix , $suffix e $extension prontamente disponíveis)

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

Você pode ter seus scripts assim

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

e

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done
    
por 20.09.2013 / 00:29
7

Existe um comando Perl rename que deve fazer o truque. Cuidado, porém: existem vários comandos diferentes chamados rename , então tenha certeza de ter o script Perl que espera um perlexpr como argumento. Este é o comando rename fornecido pelo pacote perl no Debian e derivados (Ubuntu, Mint,…), mas não em outras distribuições que podem ter um utilitário diferente chamado rename .

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

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 (zero-length) das strings ( ^ ) ou o início seguido por uma string prefix opcional com prefix .

Deixarei de encapsular isso em um shell script ou em uma função shell como um exercício para você:)

O postfix é um pouco mais difícil, porque você tem que descobrir qual parte do nome do arquivo constitui a extensão ...

    
por 20.09.2013 / 00:05
3

com zsh :

autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'

~ é o operador de globbing que significa exceto em zsh .

    
por 20.09.2013 / 21:57
1

Exemplo simples para alterar o prefixo e a extensão de todas as imagens na pasta atual.

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

Se você quiser verificar como isso afetaria seus dados antes de alterá-los, substitua o mv por echo

saída para IMG_7993.JPG é EG_IMG_7993.jpg

    
por 25.05.2016 / 19:28