Как запустить скрипт, как только недельное число изменяется?

Используя grep -l Вы только получите файлы, которые содержат по крайней мере одно соответствие.

Вам нужна информация о сколько соответствий, там находятся в файле вообще? Поскольку Вы могли пропустить использование -c который используется для подсчета количества соответствий в файле.

править: И как колдун сказал использование -I подавить соответствия в двоичных файлах могло также быть хорошей идеей.

2
25.10.2013, 18:59
1 ответ

Установите crontab как:

@reboot the-script
0 0 * * 1 the-script
0 0 1 1 * the-script

Сделать его по понедельникам и при каждой начальной загрузке. И в the-script, проверьте, было ли это уже сделано. (при использовании %W для недельного числа необходимо также сделать это первого января (благодарит Gilles), не при использовании недельного числа ISO 8061 (%V)).

Если Ваш cron не поддерживает @reboot, необходимо было бы добавить его к сценарию запуска.

Или просто выполненный это ежедневно и делает что-то как (принятие GNU find, так не OS/X, хотя Вы могли использовать OS/X stat в сочетании с -exec ... {} +.

 cd ~/Download || exit
 find . -path './20[0-9][0-9].[0-9]*' -prune -o -type f -mtime +7 -printf '%p\0%TY.%TW\0' |
   xargs -r0n2 sh -c 'mkdir -p "$2" && exec mv -i "$@"' sh

(непротестированный)

Или с zsh:

zmodload zsh/stat
cd ~/Download || exit
for f (**/*~20[0-9][0-9].[0-9]*(.DNm+7)) {
  zstat -A d -F %Y.%W -- $f &&
    mkdir -p $d &&
    mv -i -- $f $d
}

Если Вы не хотите делать это рекурсивно, это более просто:

zmodload zsh/stat
cd ~/Download || exit
for f (*(.DNm+7)) {
  zstat -A d -F %Y.%W -- $f &&
    mkdir -p $d &&
    mv -i -- $f $d
}

Если время последнего изменения не отражает время загрузки, то Вы можете использовать время рождения. На этот раз использование OS/X find, stat и xargs (и использование -maxdepth 1 не рекурсивно вызывать):

find . -type f -maxdepth 1 -Btime +7 \
  -exec stat -nf%SB -t%Y.%W {} \; \
  -exec printf '\0' \; \
  -print0  | xargs -0n2 sh -c '
  mkdir -p "$1" && mv -i "$2" "$1"' sh
3
27.01.2020, 22:06
  • 1
    Спасибо. Это решение работает, когда машина возвращается из дежурного режима? Поскольку технически я редко выключаю его полностью, я вставил его, стоят/быть в спящем режиме режимом. –  alecail 25.10.2013, 12:03
  • 2
    @AntoineLecaille. Первый не делает. cron выполнения @reboot задания, когда это запускается. Второй, Вы могли каждый час работать вместо ежедневной газеты. OS X –  Stéphane Chazelas 25.10.2013, 12:08
  • 3
    имеет GNU, находят доступными через macports. Однако я не проверил, как хорошо это работает над последним (Индивидуалисты) версия. Похоже, что это не сразу доступно прямо сейчас. –  alecail 25.10.2013, 12:16
  • 4
    zsh версия рекурсивно перемещает каждый файл, уничтожая структуры каталогов? Моя папка загрузки, оказывается, содержит расширенные архивы tar, например. –  alecail 25.10.2013, 18:02
  • 5
    Другая проблема состоит в том, что mtime кажется не связанным с датой, я загрузил файл. –  alecail 25.10.2013, 18:38

Теги

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