Я только что запустил свою поездку в сценарии удара, и я записал немного сценария, который копирует определенные файлы в мою карту с интерфейсом USB и внешний жесткий диск как резервное копирование. До сих пор это копирует весь каталог со всеми файлами включая тех, которых я не изменил, который естественно занимает некоторое время. Для изменения этого я хочу, чтобы это сравнило эти два файла (на ПК и на карте с интерфейсом USB) относительно времени, когда они были изменены. Таким образом, теперь интересно, как я могу преобразовать вывод из
статистика-c %y /test_folder/test.txt
в формат "YmDHMS"? Или возможно кто-то знает лучший способ сравнить файлы.
Для сравнения модификации (или доступ или изменение inode) время файлов, необходимо использовать секунды с Эпохи, легче обработать в сравнениях. stat
-c
опция имеет %Y
спецификатор формата для получения времени изменения в секундах с Эпохи.
Для сравнения двух файлов на основе времени изменения можно записать небольшую функцию:
chk_mod () { (( $(stat -c '%Y' "$1") > $(stat -c '%Y' "$2") )) && echo "$1 is newer" \
|| echo "$2 is newer" ;}
Вход два входных файла как первые и вторые позиционные параметры и функция произведут, какой является более новым; когда у них будет точно то же время изменения, никакой вывод не покажут.
Пример:
$ chk_mod () { (( $(stat -c '%Y' "$1") > $(stat -c '%Y' "$2") )) && echo "$1 is newer" || echo "$2 is newer" ;}
$ chk_mod foobar spamegg
spamegg is newer
В целях сравнения Вы - вероятно, более обеспеченное использование секунды с эпохи (т.е. stat -a %Y
) непосредственно или еще более простое использование один из удара встроенные тесты файла [[ FILE1 -nt FILE2 ]]
или [[ FILE1 -ot FILE2 ]]
вместо этого:
file1 -nt file2
True if file1 is newer (according to modification date) than
file2, or if file1 exists and file2 does not.
file1 -ot file2
True if file1 is older than file2, or if file2 exists and file1
does not.
Однако, так как вопрос, как спросили о преобразовании с тех пор %y
время изменения, если у Вас есть последняя версия GNU date
Вы могли обмануть и использовать это вместо этого. От man date
:
-r, --reference=FILE
display the last modification time of FILE
Так
$ date +%Y%m%d%H%M%S -r file
20170111075620
С другой стороны, Вы могли передать секунды начиная с эпохи от stat
кому: date
:
$ date +%Y%m%d%H%M%S -d "@$(stat -c '%Y' file)"
20170111075620