find -newer для обнаружения только недавно скопированных файлов - PullRequest
0 голосов
/ 04 июля 2011

Я использую следующий код

if [ ! -f $time_mark ]
then
    touch $time_mark
fi

cp -f aaa.txt bbb.txt ccc.txt $file_dir
find $file_dir -newer $time_mark > file_list.txt
...

Я использую find -newer для отправки только тех файлов, которые скопированы позже $ time_mark . Но оказывается, что если $ time_mark не существует в первый раз, он выполнит touch $ time_mark и начнет копировать файлы, что может произойти почти одновременно. В результате $ time_mark и скопированные файлы имеют одинаковое системное время, а концепция отправки только файлов, скопированных позже, чем $ time_mark , не работает.

Есть ли способ обойти эту проблему?

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 июля 2011
if [ -f $time_mark ]
then
    incremental="-newer $time_mark"
else
    incremental=""
    touch $time_mark
fi

...
find $file_dir $incremental > file_list.txt
...

Казалось бы, даже лучше выполнить касание условно (только если предыдущий запуск был успешным?)

Я настоятельно рекомендую взглянуть на rsync, rdiff-backup или другие (резервные?) Инструменты, которые не позволяют обнаруживать постепенные изменения.

В качестве очень простой меры, поскольку вы, похоже, намекаете, что хотите скопировать эти файлы (?) Куда-нибудь, простое копирование с помощью -pu (--preserve=mode,ownership,timestamps --update) может помочь вам

1 голос
/ 04 июля 2011

Не забудьте использовать «cp -p» для сохранения временных меток исходных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...