Утилита Linux для «отметки времени»

390
Nicholas White

Функция метки времени wget обеспечивает загрузку только тех файлов, которые были изменены. Я ищу инструмент командной строки linux, который будет рекурсивно сравнивать содержимое каталогов с сохраненной версией (с момента последнего запуска) и выполнять произвольную команду оболочки для любых новых или обновленных файлов. В принципе:

run-on-updated --directory /path/to/my/dir --last-results ~/.lastrun --exec "echo {}" 

Я мог даже представить это как расширение команды «найти». Существует ли такой инструмент?

2
~ / .lastrun это просто файл, верно? Не копия полного каталога? В последнем случае вы можете начать с `rsync -v --dry-run / path / to / my / dir ~ / .lastrun` mpy 11 лет назад 0
В идеале это должны быть только метаданные файла (например, путь, размер, последние изменения), а не копия каталога, так как это было бы слишком большим. В rsync определенно есть эта временная метка, но я надеюсь найти ее как самостоятельный инструмент (философия Unix?) Nicholas White 11 лет назад 0

2 ответа на вопрос

3
mpy

Попытка ответить на вопрос - вероятно, с большим количеством возможностей для улучшения:

tar -cv -f /dev/null -g ~/.lastrun /path/to/my/dir | grep -ve '/$' | xargs -I{} echo '{}' 

Примечание для команды tar: «Параметр -g» указывает tar работать с инкрементным архивом с дополнительными метаданными, хранящимися в отдельном файле, называемом файлом моментального снимка. Цель этого файла - помочь определить, какие файлы были изменены, добавлено или удалено с момента последнего резервного копирования, поэтому в следующем инкрементном резервном копировании будут только измененные файлы. " (Цитата из документа)

Команда grepисключает имена каталогов (оканчивающиеся на /), которые tar всегда выводит, и, наконец xargs, запустит нужную команду для файлов.

Это работает! Он обновляет файл ~ / .lastrun на месте, что тоже полезно. Nicholas White 11 лет назад 1
Рад, что это работает для вас. Пожалуйста, позаботьтесь, если есть какие-то имена файлов с пробелами (вчера я слишком устал, чтобы думать об этом;) Вы будете чувствовать себя более уверенно при использовании `xargs -I {} echo '{}'` - я соответственно отредактировал свой ответ. mpy 11 лет назад 0
1
Volker Siegel

Я не уверен, что вы подразумеваете под предложением «сравнить содержимое каталогов с сохраненной версией», но чтобы сделать то, что делает ответ mpy, я бы предпочел find:

Прежде чем запускать findкоманду в первый раз, вам нужно выполнить touchкоманду: создайте файл метки времени:

touch .lastrun 

Позже выполните команду touch после выполнения поиска:

find my/dir -type f -newer .lastrun -exec echo '{}' \; touch .lastrun 

Файл .lastrunникогда не будет указан сам по себе, потому что он никогда не новее, чем он сам.

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