Bash: переименовать имя файла в временную метку unix даты модификации

Здравствуйте, мне нужно переименовать файлы в их отметку времени Unix с датой их модификации и добавить ее в качестве префикса.

Другими словами, мне нужен скрипт для массового переименования Файлы типа

Азбука.jpg

и

XYZ.png

к

1649493072000 ABC.jpg

1649493072182 XYZ.png

Мне также нравится добавлять u- перед каждым файлом, измененным таким образом.

ТАК Я люблю поворачивать

Азбука.jpg

и

XYZ.png

В

u-1649493072000 ABC.jpg

u-1649493072182 XYZ.png

PS:

Ко всем модам обратите внимание, что мой вопрос отличается от других уже заданных вопросов, поскольку я спрашиваю об отметке времени модификации файла UNIX, а не о дате ISO, например, 2022-04-09.

У вас есть пробел между строкой метки времени и исходным именем файла. Это намеренно?

fpmurphy 09.04.2022 11:42

Да, это намеренно

Enigma 09.04.2022 14:03
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
2
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
find . -type f -exec \
sh -c '
for i do
    d=$(dirname "$i")
    [ "$d" = / ] && d=
    n=${i##*/}
    echo mv "$i" "$d/u-$(stat -c %Y "$i") $n"
done' _ {} +
  • Это работает рекурсивно в текущем каталоге (.). Он предназначен только для обычных файлов (не каталогов и т. д.). При необходимости измените -type f и другие флаги.

  • Он просто печатает команды mv, чтобы вы могли просмотреть их. Удалите echo, чтобы бежать по-настоящему.

  • Мы используем find для перечисления целевых файлов и его флаг -exec для передачи этого списка в цикл оболочки, где мы можем анализировать и изменять имена файлов, включая stat, чтобы получить время модификации.

  • Я не знаю вашего варианта использования, но лучшим решением может быть просто сохранить вывод: find . -type f -printf '%p u-%T@\n' в файл для дальнейшего использования (это печатает путь к файлу и время модификации в одной строке). Также, возможно, снимок (если это возможно).

Хм. Этот сценарий выводит только текст CMD и не выполняет команду mv «Также, возможно, снимок (если возможно)». Вы имели в виду что-то вроде этого imgur.com/a/wlG1DMV

Enigma 09.04.2022 15:11

См. пункт 2 (убрать echo). Это обычная практика для примера деструктивной команды (mv).

dan 09.04.2022 15:24

Под моментальным снимком я подразумеваю инкрементную резервную копию. Через btrfs, zfs, rsync и т.д.

dan 09.04.2022 15:26

Ага понял работает. Спасибо. Есть ли способ изменить его так, чтобы он использовал дату создания?

Enigma 09.04.2022 15:34
man stat дает %W для времени рождения файла (измените %Y на %W). Однако обратите внимание, что не все файловые системы записывают время рождения файла. См. первый ответ здесь для более подробной информации: unix.stackexchange.com/questions/91197/…
dan 09.04.2022 15:50

Спасибо за помощь, теперь все работает. Только я не знаю, стоит ли выкладывать нерабочий код на stackoverflow (убрать эхо).

Enigma 09.04.2022 15:56

Не волнуйтесь. Как я уже сказал, это хорошая (и распространенная) практика для команды разрушительный (mv). Если бы была какая-то ошибка, вы могли бы потерять данные. Вы должны прочитать код и объяснение (и понять его настолько хорошо, насколько сможете) перед его запуском.

dan 09.04.2022 16:16

Другие вопросы по теме