Renomeie o comando com o diretório de destino inexistente

1

Estou tentando agrupar arquivos automaticamente em subdiretórios usando um comando como este:

$ rename 's/(.)(.)(.+)/$1\/$2\/$1$2$3/' *.*

Uma execução a seco com o parâmetro -n mostra o que eu quero:

test.jpg renamed as t/e/test.jpg

Mas a renomeação atual falha com

Can't rename test.jpg t/e/test.jpg: No such file or directory

porque os subdiretórios ainda não existem.

Como posso conseguir isso sem criar todos os subdiretórios manualmente de antemão?

    
por Fabian Schmengler 25.02.2015 / 11:07

1 resposta

2

Existe diferença entre renaiming e mudar para algum lugar. No caso mais fácil (no moderno bash ) é percorrer todos os arquivos:

for f in *.*
do
    d=${f::1}/${f:1:1}
    [ -d "$d" ] || mkdir -p "$d"
    mv "$f" "$d"
done
    
por 25.02.2015 / 11:20