Преобразуйте изменяют время от статистики в метку времени

Я только что запустил свою поездку в сценарии удара, и я записал немного сценария, который копирует определенные файлы в мою карту с интерфейсом USB и внешний жесткий диск как резервное копирование. До сих пор это копирует весь каталог со всеми файлами включая тех, которых я не изменил, который естественно занимает некоторое время. Для изменения этого я хочу, чтобы это сравнило эти два файла (на ПК и на карте с интерфейсом USB) относительно времени, когда они были изменены. Таким образом, теперь интересно, как я могу преобразовать вывод из

статистика-c %y /test_folder/test.txt

в формат "YmDHMS"? Или возможно кто-то знает лучший способ сравнить файлы.

1
задан 12 January 2017 в 22:22

2 ответа

Для сравнения модификации (или доступ или изменение 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
0
ответ дан 8 December 2019 в 07:04

В целях сравнения Вы - вероятно, более обеспеченное использование секунды с эпохи (т.е. 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
0
ответ дан 8 December 2019 в 07:04

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

Похожие вопросы: