Утиліта Linux для функціональності "відмітка часу"


2

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

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

Я навіть міг уявити це як розширення команди «знайти». Чи існує такий інструмент?


~ / .lastrun - це лише файл, правда? Чи не копія повного каталогу? В останньому випадку ви можете почати зrsync -v --dry-run /path/to/my/dir ~/.lastrun
mpy

В ідеалі це повинні бути лише метадані файлу (наприклад, шлях, розмір, остання зміна), а не копія каталогу, оскільки це було б занадто великим. У rsync, безумовно, є ця функція міток часу, але я сподіваюся знайти його як окремий інструмент (філософія Unix?)
Ніколас Уайт

Відповіді:


3

Спроба відповісти на питання - можливо, з великою кількістю можливостей для вдосконалення:

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

Примітка до команди tar: "Опція '-g" дає команді tar працювати з інкрементальним архівом з додатковими метаданими, що зберігаються в окремому файлі, який називається файлом знімка. Мета цього файлу - допомогти визначити, які файли були змінені, додано або видалено з моменту останньої резервної копії, щоб наступна додаткова резервна копія містила лише модифіковані файли. " (Цитата від doc)

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


1
Це працює! Він оновлює файл ~ / .lastrun на місці, що теж корисно.
Микола Білий

Радий, що працює на вас. Будь ласка, подбайте, чи є якісь імена файлів із пробілами (я вчора був надто стомлений, щоб думати про це;) Ви будете економити під час використання xargs -I{} echo '{}'- я відповідно відредагував свою відповідь.
mpy

1

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

Перш ніж запустити findкоманду вперше, потрібно запустити touchкоманду, щоб створити файл часової мітки:

touch .lastrun

Пізніше запустіть команду touch після запуску знаходження:

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

Файл .lastrunніколи не буде вказаний у списку сам, оскільки він ніколи не є новішим за себе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.