Как я форматирую эти два сложных оператора крона?

Вы не можете действительно влиять на среду "горизонтально" в канале - процессы в a ... p_n | p_n+1 | p_n+2 ... канал порожден тем же интерпретатором оболочки, следовательно нет никакого способа измениться, переменная среды говорят p_n от p_m, echii находится в том же конвейере.

Если просто необходимо сделать простое преобразование имен файлов, которые могут быть достигнуты с регулярными выражениями, то пример Perl rename должен сделать. Вы могли бы хотеть/нуждаться использовать xargs предотвратить проблемы с выходом

find ... -print0 | xargs -0 rename "regexps"

который разграничивает имена файлов с байтами NUL (NUL, и обратная косая черта единственные символы, которым обычно запрещают появиться в имени файла).

Если Ваши имена файлов хорошего поведения (и следовательно можно принять, который Вы надеваете; 't нужен любой специальный выход "странных" символов как кавычки, пробелы и разделители, используемые в regexps), можно также сделать что-то быстрое и грязное как:

find ... | sed -r "regexps" | sh -

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

"s|^.*$|mv -vi & &.old|"

который производит что-то как

...
mv -vi /etc/a2ps.cfg /etc/a2ps.cfg.old
mv -vi /etc/aclocal_dirlist /etc/aclocal_dirlist.old
...

Если бы простое регулярное выражение не является достаточно мощным или было бы слишком громоздким, просто запишите простой сценарий, который обрабатывает имена файлов и делает переименовывание/перемещение себя и называет его любым от находки непосредственно (-exec или -exec +) или через xargs.

Наконец, если Вы просто хотите переместить набор копии файлов к другому каталогу, используйте -t опция cp и mv. cp в GNU coreutils также имеет --parents опция, которая копирует источник с его полным путем.

4
03.04.2015, 00:21
3 ответа

Для того, чтобы что-то исполнилось только во второй понедельник месяца, день недели должен быть равен 1, а день месяца - 8-14, час - 2,6,10,14,18,22 и минута - 0. Однако, как правильно прокомментировал Даг и предоставил решение, при указании как дня недели, так и дня месяца (т.е. не как *), программа выполняется, когда оба совпадают. Следовательно, вы должны тестировать явно для любого из них, и день недели проще:

 0 2,6,10,14,18,22 8-14 * * test $(date +\%u) -eq 1 && /opt/bin/cleanup.sh

Последний 1 определяет понедельник, а диапазон дней месяца (8-14) выбирает его только тогда, когда это второй понедельник.

Третий день каждого месяца, заканчивающийся на "r" в 18:15:

 15 18 3 september,october,november,december * /opt/bin/verrrrrrrry.sh

(по крайней мере, на Vixie cron вы можете использовать названия месяцев. Если ваше не поддерживает, вы можете заменить его на 9-12)

.
5
27.01.2020, 20:49

Формат минута / час / день месяца / месяц / день недели

Так что это сделало бы

0 4 9-15 * 2 /опт/внутрь/чистка.sh и

15 18 3 8-14 * /опт/внутрь/веррррррррррррррррррррррррррррррррррррррррррррррррррррррррр. sh

2
27.01.2020, 20:49

Запись cron, которая будет запускаться во 2-й понедельник каждого месяца каждые 4 часа, начиная с 02:00

00 02/4 8-14 * * [ `date +\%u` = 1 ] && /opt/bin/cleanup.sh
  • http://crontab.guru/#00_02/4_8-14_*_1

Запись cron, которая будет запускаться в 18:15 3-го дня каждого месяца, заканчивающегося на "r"

15 18 3 9-12 * /opt/bin/verrrrrrrry.sh
  • http://crontab.guru/#15_18_3_9-12_*
1
27.01.2020, 20:49

Теги

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