Робота Cron для переміщення каталогів старше 24 годин


0

Ну, що я хочу зробити, це

  1. Крон повинен працювати щогодини
  2. Він повинен рухатися каталоги у папці / disk1 / data / старше 24 годин до / disk2 / data /
  3. Перенесені каталоги повинні містити всі дані (файли / папки) всередині них

Я новачок у роботах cron, тому я абсолютно не знаю, з чого почати. Дякуємо за будь-яку допомогу!

Відповіді:


1

Що саме ви маєте на увазі під віком директорії? Час з моменту створення його inode? Я пропоную вам використовувати 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. Ви створюєте conjob з crontab -e (переконайтеся, що ви встановили EDITOR відповідну зміну середовища), дотримуючись формату, описаного в man crontab.


@slhck, приємний, добре виглядає. Незважаючи на те, що пробіли, відмінні від нових рядків, також не були проблемою з моєю версією.
MvG

Ах, треба було працювати, але краще бути в безпеці :)
slhck

Гей, я отримую помилку під час її запуску, "читайте: 13: Недопустимий параметр -d" Як це виправити?
yashau

Якщо read Вбудований ваш bash не підтримує -d опція, ви можете пропустити обидва IFS= і -d '', використовуйте -print замість -print0, і сподіваюся, що ніхто в правильному розумі не буде використовувати ім'я файлу, що містить символ нового рядка. Тепер, коли я думаю про це, це може бути пов'язано з тим, що bash виконується як sh в режимі сумісності. Я відредагую відповідь, не забудьте включити перший рядок.
MvG

0

Зверніть увагу, що -ctime варіант find робить ні маю на увазі створення час, але "inode" зміни Поле st_ctime змінюється шляхом запису або встановлення інформації про індекс (власник, група, кількість каналів, режим тощо). Для каталогів вона також відображатиме останній час створення або видалення файлу (або підкаталогу) у цьому каталозі. Отже, розглянемо чи find -type d -ctime +1 дійсно потрібний варіант.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.