Pode haver uma maneira de encurtar isso (na verdade, existem várias boas alternativas para analisar o nome do arquivo; verifique esta questão - Vou atualizar aqui assim que tiver uma chance), mas uma maneira é criar primeiro um script que lida com um único arquivo. Por exemplo, salve o seguinte como move.sh
:
#!/bin/sh
subdir='echo -n "${1%.*}" | tail -c3'
mv -v "$1" "/path/to/$subdir"
Ajuste a gosto. Isso levará a parte do nome do arquivo antes do último "." e use os três caracteres mais à direita como o diretório de destino (por exemplo, "seq0002.pdf" vai para "/ path / to / 002").
O chmod 755 move.sh
para torná-lo executável.
Eu recomendo colocar esse script em um diretório diferente para que ele não interfira. Então você pode usar, e. find
para executá-lo em todos os arquivos ou apenas executá-lo em um arquivo por vez, por exemplo:
find . -maxdepth 1 -type f -exec /wherever/move.sh {} \;
Ou para um arquivo (e supondo que move.sh esteja no diretório atual):
./move.sh seq0001.pdf
Se você quiser escolher caminhos mais complexos, poderá estender o script, por exemplo:
#!/bin/sh
subdir='echo -n "${1%.*}" | tail -c3'
if [ $subdir = "001" ] ; then
rootdir="/directory";
elif [ $subdir = "002" ] ; then
rootdir="/another/place";
else
rootdir="/default/root";
fi
mv -v "$1" "$rootdir/$subdir"
Novamente ajustando a gosto. As possibilidades são bastante ilimitadas.