Existem ferramentas que facilitam muito a renomeação de arquivos. Por exemplo, usando qualquer uma das implementações do Perl rename
, geralmente disponível sob o nome prename
:
prename '$dir = substr($_,0,3); mkdir $dir; $_ = "$dir/$_"' *.jpg
Se os diretórios já existirem, você pode simplificar isso para
prename 's!(...)!$1/$1!' *.jpg
Se a sua distribuição não transportar prename
, instale um, por exemplo, Unicode :: Tussle ou < a href="https://metacpan.org/pod/File::Rename"> Arquivo :: Renomear .
find
provavelmente não é útil aqui, pois os arquivos estão todos no mesmo diretório. No entanto, você pode encontrar um erro porque a linha de comando é muito longa. find
é uma maneira de resolver isso; você pode usar
find -maxdepth 1 -name '*.jpg' -exec prename 's!(...)!$1/$1!' {} +
Alternativamente, execute zsh ao invés de bash, e aproveite o seu zmv
function .
autoload zmv # you can put this in ~/.zshrc
mkdir_mv () {
mkdir -p -- $2:h
mv -- $1 $2
}
zmv -p mkdir_mv '(???)*.jpg' '$1/$f'
Se os diretórios já existem, você pode usar apenas
zmv '(???)*.jpg' '$1/$f'