Как стать автором
Обновить

Решение проблемы с местом, организация директории «Разобрать»

Настройка Linux *
Думаю у каждого из нас имеются директории «Разобрать» и «Downloads», заглядывая в которые все мы ужасаемся от их содержимого, и в особенности от самой идеи, что когда-нибудь все это придется разгребать. Предлагаю свое решение проблемы с недостатком места, это не способ суперархивации, и не способ бесконечного наращивания места где-либо в облаке, лишь идея по организации скачанной информации.

image

Какова вероятность того, что если о файле не вспомнилось в течение 2 недель, вспомнятся через год или два, при том, что почти все скачанное в Интернете имеет свойство быстро устаревать. Данное решение так же подходит и для организации shared ресурсов (файловых помоек).

Не всегда удается прослушать альбом, неизвестного коллектива, заинтересовавшись лишь тем, что данную музыку отнесли к любимому жанру, обычно остается два решения. В первом случае альбом попадает в директорию «Разобрать» / остается в «Downloads», что называется на потом, о том как быстро раздуваются эти директории известно всем. Во втором случае альбом сохраняется в специально отведенную директорию «Музыка», постоянно ее наращивая, но, как следствие, в определенный момент приходит понимание, что это вовсе не место, где хранятся любимые и отобранные исполнители, а все та же директория «Разобрать», в которой выполнена сортировка по типу файлов звуковые.
То же самое с фильмами, книгами, обоями, с любыми документами. Скачивать можно поддавшись на эмоции, рекомендации, красивую обложку, а вот заслуживает ли на самом ли деле данный фильм или книга места на диске, еще стоит выяснить. Про файловые помойки комментировать не стоит, ибо название говорит само за себя.

Собственно мое решение это скрипт, который автоматически чистит данные директории, но по-умному, и не сразу. Хочу оговориться, что у меня на диске все отсортировано и располагается в своих директориях: «Music», «Photo», «Video», «Books», «Work», etc, это именно отобранная мною информация, о которой я знаю и помню. Все, что туда попадает я прослушиваю и просматриваю. Идея состоит в том, что скачанная информация хранится в «Downloads» в течение 2 недель после чего, если я о ней таки вспоминаю (если это действительно известная и ожидаемая книга/исполнитель обычно о таком помнится), она попадает в одну из отведенных директорий, а иначе удаляется в небытие. На сам процесс «вспомнить» я себе оставляю 2 недели. Данные недели отсчитываются не для директории «Downloads» в целом, а для каждого файла в отдельности, т.е. скрипт не удаляет все раз в 2 недели, а каждые четыре часа проверяется нет ли устаревших файлов, которые можно удалить. Так же, в скрипте применен аргумент atime (по времени последнего обращения к файлу), если имеется например клип/фото/музыка в отношении которых я все еще в раздумьях, счетчик, отсчитывающий те самые 2 недели, при каждом открытии файла обнулятся, поэтому, если информация важная и востребованная, она продержится до тех пор, пока о ней действительно не позабуду. Данная система успешно работает на протяжении полугода, однажды таки удалилось несколько книг, не успевших переместиться на смартфон, в остальном только плюсы.

Собственно сами скрипты:

cat /var/scripts/cleaning

#!/bin/bash
FOLDERS="/mnt/drive_2/shared_folder /mnt/drive_2/Downloads /home/*/Desktop /home/*/Downloads /home/*/.Trash /home/*/.local/share/Trash"
LOGDIR=/var/log/cleaning
LOG="$LOGDIR/log"

# проверяем наличие директории с логом, если отсутствует, создаем
if [ -d "$LOGDIR" ]; then
echo "directory $LOGDIR is exist"
else
mkdir $LOGDIR
echo "directory $LOGDIR was created"
fi

# проходимся по директориям
for DIRECTORY in $FOLDERS ; do
echo "PROCESSING_DIRECTORY=$DIRECTORY"

# чистим директории от файлов, к которым не было обращения более 2 недель
find $DIRECTORY -atime +14 -type f | while read FILE ; do
rm -rf "$FILE"
echo "$(date +%d.%m.%y%t%H:%M:%S) File $FILE was delited from $DIRECTORY as old"
echo "$(date +%d.%m.%y%t%H:%M:%S) File $FILE was deleted from $DIRECTORY as old" >> $LOG
done
# чистим пустые директории
find $DIRECTORY -type d -empty | while read DIR ; do
rm -rf "$DIR"
echo "$(date +%d.%m.%y%t%H:%M:%S) Directory $DIR was delited from $DIRECTORY directory as empty"
echo "$(date +%d.%m.%y%t%H:%M:%S) Directory $DIR was deleted from $DIRECTORY directory as empty" >> $LOG
done

done

exit 0


cat /etc/crontab

# cleaning
45 */4  * * *   root    /var/scripts/cleaning                                   # cleaning every 4 hours


cat /etc/logrotate.d/cleaning

/var/log/cleaning/log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}


Логирование в данном варианте сделано специально, чтобы не возникало вопросов, куда и как пропал файл, если оно не нужно можно использовать следующие команды:
для файлов: find $DIRECTORY -atime +7 -type f -delete
для директорий: find $DIRECTORY -type d -empty -delete

В случае продакшен применения данного скрипта, там, где может потеряться важная информация (например общий shared ресурс организации), для исключения вероятности сбоя системного времени (или ntp сервера), данный скрипт можно несколько усовершенствовать, заместо удаления, перемещая файлы в некую промежуточную директорию, откуда они будут удаляться лишь при сокращении запаса свободного места, тем самым ненужное уже не будет «мазолить» глаза в общей директории, но, при этом остается возможность, быстрого возврата.

Напоследок несколько полезных выдержек из man find:

-mtime — время последнего изменения файла.
-atime — время последнего обращения к файлу.
-ctime — время последнего изменения владельца или прав доступа к файлу.

-mmin — количество минут прошедших с момента последнего изменения файла.
-amin — количество минут прошедших с момента последнего обращения к файлу.
-cmin — количество минут прошедших с момента последнего изменения владельца или прав доступа к файлу.

При поиске русского man для копипасты быланайден удобный конфигуратор для команды find, возможно кому пригодится…
Теги:
Хабы:
Всего голосов 60: ↑44 и ↓16 +28
Просмотры 3K
Комментарии Комментарии 195