renomear arquivos em massa para o nome de suas pastas

4

Eu tenho uma estrutura de pastas assim: 'Pictures / 2015 / 2015-01-02 / random_name.jpg' e quero renomear os arquivos para '2015-01-02 001.jpg', '2015-01-02 002.jpg' etc.

Eu não estou muito familiarizado com programação bash e expressões perl, então qualquer ajuda é muito apreciada! Agradecemos antecipadamente

    
por bashnoob 18.09.2015 / 22:51

2 respostas

5

cd target_dir
dcomp="$(basename "$(pwd)")"
count=1
for file in *; do
    ext="${file##*.}"
    mv -v "$file" "$dcomp $(printf '%03d' "$count").$ext"
    (( count++ ))
done

Isso pressupõe que você realmente deseja um espaço nos nomes dos arquivos de resultado, o que não é uma ideia maravilhosa. Você pode, claro, mudar o padrão dentro do loop para o que você quiser. Para fazer isso em vários diretórios, coloque tudo em um loop sobre eles.

    
por 18.09.2015 / 22:56
2

Isto é o que você precisa;)

 cd Pictures/2015/2015-01-02
 c=0 curdir=${PWD##*/} rename -n '
     s/.*/sprintf("%s %.03d.jpg", $ENV{curdir}, $ENV{c}++)/e' *jpg

Obviamente, essa é a renomeação de Perl.

Remova o interruptor -n após seus testes (execução a seco).

    
por 18.09.2015 / 23:23

Tags