find . -type f -exec bash -c 'for arg; do arg=${arg#./} mod=$(stat -c %x "$arg") base=${arg%.*} ext=${arg#$base}; echo mv -i "$arg" "${base}_${mod%% *}$ext"; done' _ {} +
(многострочная версия для удобства чтения):
find . -type f -exec bash -c 'for arg; do
arg=${arg#./} mod=$(stat -c %x "$arg") base=${arg%.*} ext=${arg#$base}
echo mv -i "$arg" "${base}_${mod%% *}$ext"
done' _ {} +
Я оставил там echo
, чтобы вы увидели , что он собирается запустить, прежде чем запустить его.Удалите его, если вы уверены, что хотите переместить файлы.
Он добавляет то, что вы хотите до расширения, но полностью FAIL , если:
- Имя файла не содержит точку
- Этот файл находится в пути к папке, которая содержит точку
Он также не будет работать должным образом с файлами сдвойные расширения, например .tar.gz
Объяснение: Я передаю все файлы скрипту bash с помощью find . -type f -exec bash -c '...' _ {} +
Скрипт bash выполняет одно и то же действие для всех файлов: получите модификацию date
, найдите basename
и .extension
, затем переименуйте файл в basename_date.extension