Сравнение дат файлов в Bash
Я работаю над небольшим скриптом, похожим на Dropbox, и мне нужно сравнить даты двух файлов и заменить старые файлы новыми, не используя rsync
. Есть ли простой способ сделать это? Может ли SHA1
помочь мне определить, какой файл новый?
4 ответ(ов)
Вы можете сравнивать время модификации файлов с помощью команды test
, используя операторы -nt
(новее чем) и -ot
(старее чем):
if [ "$file1" -ot "$file2" ]; then
cp -f "$file2" "$file1"
fi
В этом примере, если файл $file1
старее файла $file2
, то происходит копирование содержимого $file2
в $file1
. Используйте эти операторы для выполнения условий, связанных со временем модификации файлов в скриптах.
Вот решение в стиле POSIX:
find -name file2 -newer file1
Этот командный пример использует утилиту find
, чтобы найти файл file2
, который является новее файла file1
. Параметр -name
указывает имя файла для поиска, а -newer
проверяет, был ли найденный файл изменен позже указанного файла. Убедитесь, что вы находитесь в правильной директории или добавьте путь к команде для корректного поиска.
Конечно! Вот краткий и удобный вариант: посмотрите на man stat
:
stat -c %y файл
Ваш код использует команду stat
для получения информации о файле и awk
для фильтрации данных. В частности, он извлекает дату и время последней модификации файла. Вот краткое объяснение вашего кода:
stat file | awk -F': ' '/Modify: /{print $2}'
stat file
- эта команда выводит информацию о файле, включая дату и время последней модификации, доступности и размере.|
- это оператор конвейера, который передаёт вывод первой команды (stat file
) на ввод следующей команды (awk
).awk -F': '
- здесьawk
используется с указанием разделителя-F
: он задаёт": "
(двоеточие и пробел) в качестве разделителя для анализа строк.'/Modify: /'
- это регулярное выражение, которое ищет строки, содержащие "Modify: ".{print $2}
- эта часть указываетawk
выводить вторую часть строки после разделителя, что соответствует дате и времени последней модификации файла.
Таким образом, данный код будет выводить только дату и время последней модификации указанного файла. Если вам нужно получить только эту информацию, то решение работает отлично!
Как изменить цвет вывода echo в Linux
Как работает "cat << EOF" в bash?
Как использовать 'grep' для непрерывного потока?
Как создать файл в Linux из терминала? [закрыто]
Автоматический вход в Docker через Bash-скрипт