Для zsh
:
saveIFS="$IFS"; IFS=$'\0'; while read -A line; do mv "${line[2]}" "${line[1]%.*}.${line[2]}"; done < <(find -maxdepth 1 -type f -printf "%T+ %f\n"); IFS="$saveIFS"
Для Bash (обратите внимание на различия в параметре для read
и индексации с нуля вместо единицы):
saveIFS="$IFS"; IFS=$'\0'; while read -a line; do mv "${line[1]}" "${line[0]%.*}.${line[1]}"; done < <(find -maxdepth 1 -type f -printf "%T+\0%f\n"); IFS="$saveIFS"
Эти файлы переименовываются путем добавления даты изменения в начало исходного имени файла, которое сохраняется для предотвращения конфликтов имен.
Имя файла, полученное в результате, может выглядеть следующим образом:
2009-12-15+11:08:52.original.txt
Поскольку в качестве внутреннего разделителя полей (IFS) используется ноль, имена файлов с пробелами должны быть сохранены.