Добавить дату последнего изменения файла к его имени - PullRequest
0 голосов
/ 29 июня 2019

Я изо всех сил пытаюсь найти способ получить дату последнего изменения каждого файла в папке и подпапках и добавить их соответственно к их именам. Пока что я могу добавить только пользовательский текст для файла, в данном случае это _Suffix из этой команды: find * -exec mv {} {}_Suffix \;

Возможно, это не самый лучший способ, поскольку мой текст вставляется в самый конец файла, поэтому он меняет расширение файла, но, по крайней мере, работает:)

Но я хочу знать, как вставить дату последней модификации вместо _Suffix и сделать это для каждого файла рекурсивно.

1 Ответ

0 голосов
/ 29 июня 2019
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...