Zsh
Use a função zmv
para mover ou renomear arquivos correspondidos por uma expressão curinga. Não há uma maneira interna de criar o diretório de destino, então eu forneço uma função para fazer isso.
autoload -U zmv
mkdir_mv () {
mkdir -p -- ${(P)#:h}
mv -- $@
}
cd /home/user/dump
zmv -p mkdir_mv '(????)_(??)_(??)_??:??:??.swf' '/home/user/save/$1/$2/$3/$f'
shell POSIX
Se você precisar de uma solução portátil, use um loop de shell sobre os arquivos e a manipulação da string do shell para extrair as partes dos nomes dos arquivos.
cd /home/user/dump
for f in ????_??_??_??:??:??.swf; do
year=${f%%_*}; suffix=${f#*_}
month=${suffix%%_*}; suffix=${suffix#*_}
day=${suffix%%_*}
mkdir -p "/home/user/save/$year/$month/$day"
mv "$f" "/home/user/save/$year/$month/$day/$f"
done