Лучше (самый быстрый и без использования места для хранения путем копирования вместо перемещения), также не зависит от имен файлов, если они содержат специальные символы в своих names:
export destination
find "$soure" -type f "-$days" -print0 | xargs -0 -n 10 bash -c '
for file in "$@"; do
echo -n "Moving $file to $destination/"`dirname "$file"`" ... "
mkdir -p "$destination"/`dirname "$file"`
\mv -f "$file" "$destination"/`dirname "$file"`/ || echo " fail !" && echo "done."
done'
Или быстрее, перемещение группы файлов за одно и то же время для нескольких процессоров, используя команду "parallel":
echo "Move oldest $days files from $soure to $destination in parallel (each 10 files by "`parallel --number-of-cores`" jobs):"
function move_files {
for file in "$@"; do
echo -n "Moving $file to $destination/"`dirname "$file"`" ... "
mkdir -p "$destination"/`dirname "$file"`
\mv -f "$file" "$destination"/`dirname "$file"`/ || echo " fail !" && echo "done."
done
}
export -f move_files
export destination
find "$soure" -type f "-$days" -print0 | parallel -0 -n 10 move_files
PS: У вас есть опечатка, "soure" должен быть "source". Я сохранил имя переменной.