Задание cron for hour=7 -Вместо этого 19 запусков каждый час

Одной из идей было бы использовать комбинацию fdupesи rsync.

  1. Создайте промежуточную область для всех файлов, рассматриваемых для передачи, с помощью rsync.
  2. Удалить все дубликаты, кроме одного в промежуточной области (только ).
  3. Передайте оставшиеся файлы в промежуточной папке по назначению, снова используя rsync.

Для этого нам понадобятся три локации:

  1. Оригиналы, путь к каталогу в $origdir.
  2. Промежуточная область, путь к каталогу в $stagingdir.
  3. Пункт назначения, локальный или удаленный путь в $destdir.

Во-первых, создайте промежуточную область (это предполагает, что промежуточная область еще не существует, или если она существует, то она содержит только вещи, которые должны быть перемещены):

rsync --archive --verbose --link-dest="$origdir" \
    --include="*.jpg" --include="*/" --exclude="*" \
    "$origdir/" "$stagingdir"

При этом все файлы, имена которых заканчиваются на .jpg, будут скопированы в промежуточную область путем создания жестких ссылок из их исходных местоположений. Потребуется только пространство для создания структуры каталогов, и данные файла не будут дублироваться (, если только $stagingdirи $origdirне будут расположены на двух разных разделах ). Чтобы добавить другие шаблоны имен файлов, добавьте дополнительные параметры --include(перед параметром--exclude).

Затем выполните fdupesнад$stagingdir:

fdupes --delete --recurse "$stagingdir"

Это интерактивно запросит у вас подтверждение перед удалением чего-либо. Также есть опция --noprompt, которая удаляет файлы без подтверждения. Пожалуйста, внимательно прочтите fdupesруководство . Файлы в папке $origdirне будут затронуты удалением файлов из промежуточной области,

Затем удалите пустые каталоги из промежуточного каталога (это дополнительный шаг, который просто немного наводит порядок):

find "$stagingdir" -type d -empty -delete -print

Это пройдёт всю промежуточную область и удалит все пустые каталоги. Любой удаленный каталог будет напечатан после успешного удаления.

И, наконец, перенесите не -дубликаты:

rsync --archive --verbose "$stagingdir/" "$destdir"

Этот процесс сохранит исходную структуру каталогов для файлов, которая соответствует шаблонам, используемым в первом rsync, и которые все еще остаются на месте после того, как fdupesудалил дубликаты.

1
01.12.2020, 23:38
1 ответ

Допустимый диапазон часов: 0-23, поэтому следует использовать

*/15 7-18 * * *

для запуска каждые 15 минут от07:00(первого запуска )до18:45(последнего запуска )каждый день.


Начальный нуль для диапазона часов(07)был причиной того, что поле часов принималось как *. Я проверил(cronie-1.5.1-lp151.4.6.1.x86_64на suse ), что поведение совпадает с вашим описанием для диапазона, например * 01-02 * * *, но неожиданно сработало правильно для одного значения:* 01 * * *. Так что я бы не стал копать дальше, мы просто не используем начальные нули.

3
18.03.2021, 22:45

Теги

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