2

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

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

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

2 ответа2

3

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

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

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

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

1

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

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

touch .lastrun

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .