Ну, то, что я хочу сделать, это

  1. Крон должен запускаться каждый час или около того
  2. Он должен переместить каталоги в папке /disk1 /data / старше 24 часов в /disk2 /data /
  3. Перемещаемые каталоги должны содержать все данные (файлы / папки) внутри них

Я новичок в работе cron, поэтому я абсолютно не знаю, с чего начать. Спасибо за любую помощь!

2 ответа2

1

Что именно вы подразумеваете под возрастом каталога? Время с момента создания своего инода? Я предлагаю вам использовать find чтобы определить каталоги, которые вы хотите переместить. Например, вот так:

#!/bin/bash
res=0
cd /disk1/data/
find -type d -ctime +1 -print0 -prune | \
while IFS= read -r -d '' i; do
    if [[ ${i} == */* ]]; then                    # need to ensure subdir exists
        if ! mkdir -p "/disk2/data/${i%/*}; then  # error creating dir?
            res=1
            continue
        fi
    fi
    rm -rf "/disk2/data/${i}"                     # make sure target does not exist
    mv "${i}" "/disk2/data/${i}"                  # move stuff
done
exit ${res}

Если бы другим людям было позволено писать на disk2 , этот код мог бы быть уязвим для некоторых видов атак по символическим ссылкам , если кто-то создает правильные символические ссылки достаточно быстро. Точно сказать не могу.

Я предлагаю вам написать скрипт в какой-нибудь файл и выполнить его из cronjob. Вы создаете соединение с помощью crontab -e (убедитесь, что вы правильно установили переменную окружения EDITOR ), следуя формату, описанному в man crontab .

0

Обратите внимание, что параметр -ctime команды find означает не время создания, а «время изменения inode». Поле st_ctime изменяется путем записи или установки информации об узле (владелец, группа, количество ссылок, режим и т.д.). Для каталогов это также будет отражать последний раз, когда файл (или подкаталог) был создан или удален в этом каталоге. Итак, подумайте, действительно ли find -type d -ctime +1 - вариант, который вам требуется.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .