0

Сравнение дат файлов в Bash

14

Я работаю над небольшим скриптом, похожим на Dropbox, и мне нужно сравнить даты двух файлов и заменить старые файлы новыми, не используя rsync. Есть ли простой способ сделать это? Может ли SHA1 помочь мне определить, какой файл новый?

4 ответ(ов)

1

Вы можете сравнивать время модификации файлов с помощью команды test, используя операторы -nt (новее чем) и -ot (старее чем):

if [ "$file1" -ot "$file2" ]; then
    cp -f "$file2" "$file1"
fi

В этом примере, если файл $file1 старее файла $file2, то происходит копирование содержимого $file2 в $file1. Используйте эти операторы для выполнения условий, связанных со временем модификации файлов в скриптах.

0

Вот решение в стиле POSIX:

find -name file2 -newer file1

Этот командный пример использует утилиту find, чтобы найти файл file2, который является новее файла file1. Параметр -name указывает имя файла для поиска, а -newer проверяет, был ли найденный файл изменен позже указанного файла. Убедитесь, что вы находитесь в правильной директории или добавьте путь к команде для корректного поиска.

0

Конечно! Вот краткий и удобный вариант: посмотрите на man stat:

stat -c %y файл
0

Ваш код использует команду stat для получения информации о файле и awk для фильтрации данных. В частности, он извлекает дату и время последней модификации файла. Вот краткое объяснение вашего кода:

stat file | awk -F': ' '/Modify: /{print $2}'
  1. stat file - эта команда выводит информацию о файле, включая дату и время последней модификации, доступности и размере.
  2. | - это оператор конвейера, который передаёт вывод первой команды (stat file) на ввод следующей команды (awk).
  3. awk -F': ' - здесь awk используется с указанием разделителя -F: он задаёт ": " (двоеточие и пробел) в качестве разделителя для анализа строк.
  4. '/Modify: /' - это регулярное выражение, которое ищет строки, содержащие "Modify: ".
  5. {print $2} - эта часть указывает awk выводить вторую часть строки после разделителя, что соответствует дате и времени последней модификации файла.

Таким образом, данный код будет выводить только дату и время последней модификации указанного файла. Если вам нужно получить только эту информацию, то решение работает отлично!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь