Як змусити мою систему видалити всі файли в певному каталозі, старші певного часу, зберігаючи недоторкану структуру каталогу?


12

У мене є каталог на моїй машині, думаю про це як про свій власний tmpкаталог, але це в моєму ~каталозі. І я хочу зробити так, щоб моя система кожні 3 години видаляла всі файли (хоч будь-яка структура каталогів залишалася недоторканою, але все-таки видаляла всі файли на всіх рівнях каталогів рекурсивно) в той каталог, який старший за добу.

Я запускаю Ubuntu GNOME 15.10 з GNOME 3.18, це можна зробити? А якщо так, то як? Я хотів би, щоб це було повністю автоматизовано без взаємодії користувачів. Це має бути щось, що автоматично починається під час входу в систему, тому мені не потрібно запускати щось під час кожного запуску.

Відповіді:


21

Використання find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp це каталог, який потрібно шукати рекурсивно, змініть це відповідно

  • -type f шукатиме лише файли

  • -mtime +0 який буде відповідати файлу, якщо він востаннє змінений день або більше тому

  • -delete просто видалить відповідні файли

Тут улов є -mtime +0, більшість може подумати про використання, -mtime +1але findігнорує будь-який дробовий час під час розрахунку днів. Отже, -mtime +1буде відповідати файл, якщо остання модифікація була зроблена щонайменше 2 дні тому.

Цитуючи man find, -mtimeмає таку ж угоду про терміни, що і -atime:

-час н

Востаннє доступ до файлу був n * 24 години тому. Коли ви знайдете цифри, скільки 24-годинних періодів тому до цього файлу востаннє зверталися, будь-яка дробова частина ігнорується, тож, щоб відповідати часу +1, файл повинен був отримати доступ щонайменше два дні тому.

Також зауважте, що якщо ви хочете точності, вам слід поглянути на -mminваріант findпозначення часу в хвилинах.

Щоб запустити його періодично через 3 години, ви можете додати cronзапис.

Виконати crontab -eта додати:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Використання zshдля видалення файлів:

rm ~/tmp/**/*(.-m+0)

Додавання до cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

Ви повинні мати змогу видалити всі файли, старші 1 дня, /home/username/directoryта всі каталоги під ним за допомогою:

find /home/username/directory -type f -mtime +1 -delete

І щоб запланувати цю команду кожні три години, встановіть її як роботу з кроном:

crontab -e

Тоді всередині crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Котрий виконує вашу команду кожні три години години (тобто хвилина 0), тому 3:00 ранку, 6:00 ранку тощо.

Перейдіть на сторінку cronта crontab manpagesотримайте додаткову інформацію про них.


4
Ця відповідь насправді неправильна, дивіться іншу відповідь .

4
Оскільки ця відповідь неправильна і насправді не говорить нічого більше, ніж інша відповідь, будь ласка, вдосконаліть свою відповідь так, щоб вона була правильною та кращою за іншу відповідь, або видаліть її.

5
@ParanoidPanda Я розумію, що вам потрібні якісні відповіді, але коментувати по суті одне і те ж саме двічі є досить непотрібним і може сприйматися як агресивне, особливо для нового користувача.
RPiAwesomeness

2
@RPiAwesomeness: Ну, я прокоментував другий раз, тому що мені не вистачало часу, щоб відредагувати свій перший коментар, і я також хотів сказати, що вони повинні видалити свою відповідь, що, можливо, не було щось обов'язково зрозуміле з мого першого коментаря, хоча я Я не хотів, щоб вони відчували себе під атакою, і мені подобалося, що я просто казав, що вони дали неправильну відповідь і тепер повинні видалити її, тому я додав трохи про покращення. Але я бачу, як це можна сприймати неправильно, тому я прошу вас пам’ятати: Панда стає агресивною лише тоді, коли ви забираєте його бамбук. ;-)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.