Linux скрипт очистки папки

Linux — заметки пользователя

Допустим, есть необходимость постоянной очистки некоторых папок (например, папки «Загрузки») для предотвращения захламления данных папок. Ходить и чистить папки по ученическим компьютерам — вариант не самый удобный. Для данного дела очень удобно прикрутить скрипт.

Речь пойдет об ОС семейства Ubuntu (точно работает в Linux Mint 9,11, Ubuntu 10.04, Росинка 9).

Краткий обзор ситуации.

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

Решение.

С историей все просто. Необходимо оставить один браузер на компьютере (в моем случае, Firefox), и отключить в нем сохранение истории.
С папкой загрузок сложнее. Тут необходимо создать и использовать скрипт.
В моем случае скрипт такой:

На компьютерах имеются два пользователя: student и teacher. Скрипт удаляет из папок «Загрузки» обоих пользователей все файлы.
Также он чистит домашнюю папку пользователя student от всех файлов, перемещая их в папку «Файлы». Это мера от захламления ненужными файлами данной папки.
Файл с данным скриптом необходимо скопировать в папку /usr/sbin и дать права на запуск. Затем в файл /etc/rc.local записать путь к этому скрипту.
Стараясь максимально упростить и укоротить процедуру работы с одним компьютером, удобнее эти действия, тоже оформить в виде скрипта.
Его содержимое:

#!/bin/sh -e
cp remove_downloads.sh /usr/sbin/
chmod +x /usr/sbin/remove_downloads.sh
sed ’13 a /usr/sbin/remove_downloads.sh’ -i /etc/rc.local
exit

Первый скрипт я назвал remove_downloads.sh, второй do.sh. Оба скрипта должны быть в одной папке.
Порядок действий:

  1. Разместить оба файла в одной папке локально на компьютре.
  2. Запустить терминал в этой папке.
  3. В терминале набрать sudo sh ./do.sh
  4. Перезагрузить компьютер.
Читайте также:  Read mdb file linux

После перезагрузки папка загрузок очистится. Чистка будет производиться каждый раз при включении компьютера.

Источник

Удаление файлов старше n дней в Linux

Пользователи Linux иногда сталкиваются с ситуацией, когда нужно почистить определенный каталог, удалив из него старые, неиспользуемые файлы. Через стандартный проводник это делать далеко не всегда удобно. Но данную процедуру очень просто выполнять через терминал.

По ходу данной статьи мы разберемся с удалением файлов старше определенного количества дней в Ubuntu. Заодно объясним некоторые нюансы этой процедуры.

Удаление файлов старше n дней в Linux

Для терминала Ubuntu существует специальная команда find, которая отвечает за поиск файлов на компьютере. А с помощью опции -mtime получится найти только те файлы, дата изменения которых старше заданного временного промежутка. В качестве примера возьмем каталог Downloads и срок в 35 дней.

Откройте терминал и запустите следующую команду:

find ~/Downloads -type f -mtime +35

8fsAGtAO1XbSkAAAAASUVORK5CYII=

Вам необязательно действовать напрямую и стирать сразу же все файлы. Их можно отсортировать дополнительно по еще одному признаку, например, по названию или расширению. Для этого есть опция -name, которая прописывается сразу же после директории. Если нужно избавиться только от zip-архивов, то подойдет такая команда:

find ~/Downloads -name «*.zip» -type f -mtime +35 -delete

ByZkw8E2C2n2AAAAAElFTkSuQmCC

Ну и напоследок хотелось бы упомянуть, что при запуске терминала Ubuntu из конкретной папки вручную директорию прописывать не придется. Это можно сделать через стандартное приложение Файлы, если перейти к нужному каталогу, кликнуть правой клавишей мыши по пустому месту и в контекстном меню выбрать пункт Открыть в терминале.

7v5wAAAABJRU5ErkJggg==

Тогда команда для поиска, если она еще нужна, сократится до следующего варианта:

wd2Gmddp20QPQAAAABJRU5ErkJggg==

А для удаления не забудьте в конце дописать опцию -delete:

Читайте также:  Установить pip linux centos

8f507C0nZQ++gAAAAASUVORK5CYII=

Выводы

По ходу данной статьи мы вкратце объяснили, как можно в конкретном каталоге отыскать файлы старше определенного возраста через терминал Ubuntu, а также как удалить файлы старше n дней linux. Сама по себе процедура довольно простая, но может сэкономить много времени при чистке уже ненужных данных с компьютера.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Shell script to delete directories older than n days

To they bare any relation on their actual creation/modification time? Because find could do it without looking at the name then.

What do you mean by «older than»? Are you referring to the time the directory was created, the time its contents were last changed, or something else? Be careful with some of the answers below; ctime is the inode change time. For a directory, it changes when files are added or removed from the directory.

5 Answers 5

This will do it recursively for you:

find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf <> \; 

Explanation:

  • find : the unix command for finding files / directories / links etc.
  • /path/to/base/dir : the directory to start your search in.
  • -type d : only find directories
  • -ctime +10 : only consider the ones with modification time older than 10 days
  • -exec . \; : for each such result found, do the following command in .
  • rm -rf <> : recursively force remove the directory; the <> part is where the find result gets substituted into from the previous part.

Alternatively, use:

find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf 

Which is a bit more efficient, because it amounts to:

rm -rf dir1; rm -rf dir2; rm -rf dir3; . 

With modern versions of find , you can replace the ; with + and it will do the equivalent of the xargs call for you, passing as many files as will fit on each exec system call:

find . -type d -ctime +10 -exec rm -rf <> + 

-mtime was better for me as it checks content changes rather than permission changes, otherwise this was perfect.

Читайте также:  I915 linux driver debian

The more efficient approach can backfire if you have too many folders to delete: stackoverflow.com/questions/11289551/…. For the same reason, in order to avoid deletion of the base folder it’s better to use -mindepth 1 (rather than /path/to/folder/* ).

If you want to delete all subdirectories under /path/to/base , for example

/path/to/base/dir1 /path/to/base/dir2 /path/to/base/dir3 

but you don’t want to delete the root /path/to/base , you have to add -mindepth 1 and -maxdepth 1 options, which will access only the subdirectories under /path/to/base

-mindepth 1 excludes the root /path/to/base from the matches.

-maxdepth 1 will ONLY match subdirectories immediately under /path/to/base such as /path/to/base/dir1 , /path/to/base/dir2 and /path/to/base/dir3 but it will not list subdirectories of these in a recursive manner. So these example subdirectories will not be listed:

/path/to/base/dir1/dir1 /path/to/base/dir2/dir1 /path/to/base/dir3/dir1 

So , to delete all the sub-directories under /path/to/base which are older than 10 days;

find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf 

Источник

Оцените статью
Adblock
detector