find . -type f |
shuf | # shuffle the input lines, i.e. apply a random permutation
nl -n rz | # add line numbers 000001, …
while read -r number name; do
ext=${name##*/} # try to retain the file name extension
case $ext in
*.*) ext=.${ext##*.};;
*) ext=;;
esac
mv "$name" "../randomized/${name%/*}/$number$ext"
done
Substitua mv
por ln
ou ln -s
e possivelmente um diretório de destino diferente como achar melhor. Note que como find
ainda pode estar percorrendo o diretório pelo tempo em que mv
é executado, você não deve renomear ou vincular o arquivo dentro do mesmo diretório.
shuf
é específico do GNU coreutils, o resto é POSIX. Se você não estiver no Linux ou no Cygwin, veja as alternativas em awk ou Perl .