Сценарий очистки на основе возраста и список TXT каталогов

Это для моего медиасервера:

У меня есть папка, содержащая все мои сериалы, и для некоторых шоу, я сохраняю затем неограниченно долго, в то время как другие, я хотел бы вычистить медиа-файлы, поскольку они поражают 90-дневный возраст.

Таким образом, я хотел бы заполнить список шоу их путем, что я хочу быть очищенным после 90 дней в файле TXT и запланированном сценарии, который будет ежедневно пробегать тот список.

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

Конечно, я хотел бы очистить видеофайлы и не других, как сезонные папки, иллюстрации и т.д. Так типичный список расширений - mkv, mp4, mpg, mpeg, avi, xvid, ts пойдет, но не структура папок.

Я нашел много практического руководства для чистки файлов более старым, чем X дней, но не что-то это конкретный.

Когда у меня были свои медиа-файлы в Windows PC, я запустил простую названную программу, автоудаляют, где Вы указали папки и дни и расширения, и это заботилось о вещах, но начиная с перемещения к Ubuntu, я не нашел то же.

Любая справка ценится.

0
задан 5 February 2018 в 08:48

2 ответа

Нет никакой потребности ни в какой дополнительной программе или даже сценарии, find может сделать это с единственным вызовом.

Я предполагаю, что у Вас есть дерево каталогов как это:

.
├── delete
├── GoT
│  ├── artwork.png
│  ├── S10E05_Everybody_dies.mkv
│  └── stream.ts
├── TBBT
│  └── Season_01
│  ├── file.avi
│  └── notes
└── The_Wire
    ├── current.mp4
    └── wallpaper.jpg

Содержание файла delete похож на это:

/full/path/to/GoT
/full/path/to/TBBT

Это find команда будет искать каждый из тех каталогов для файлов с указанными расширениями и возрастом больше, чем 89 дни:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Вывод моего примера:

/full/path/to/GoT/stream.ts
/full/path/to/GoT/S10E05_Everybody_dies.mkv
/full/path/to/TBBT/Season_01/file.avi

Используйте это для тестирования команды. Если это делает то, что Вы хотите, просто добавляют -delete в конец команды для выполнения удаления:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89 -delete

Можно периодически выполнять эту последнюю команду, например, использование cronjob (но устанавливать SHELL=/bin/bash в crontab сначала, cron использование dash по умолчанию!) – ключевое слово @daily мог быть полезным:

@daily find $(</path/to/delete) …

Примечание по пробелам в путях: Я действительно рекомендую избавиться от пробелов в именах каталогов и именах файлов в целом, но если у Вас действительно должны быть пробелы в путях, Вы могли бы хотеть установить IFS=$'\n' сначала позволить только символ новой строки как разделитель для аргументов.

2
ответ дан 31 October 2019 в 01:52

Хорошо, вот моя обратная связь.

Да, работы сценария, но с большим предупреждением.

Если "удалить" файл не будет найден, то он будет работать успешно, так или иначе, но против любого и всех файлов и относится везде, где Вы, оказывается, сидите в командной строке.

  • Существует ли способ поместить проверку на существование файла, еще заканчиваются?

Я пытался вставить кавычки удалить файл, обработать интервал, но он не взял это хорошо. Таким образом, я выполнил Ваше предложение.

Вот точная команда, как управляемая:

IFS=$'\n' && find $(</opt/deletelist) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Я действительно получал результаты, которые я ожидал, таким образом, это, действительно кажется, работает.

0
ответ дан 31 October 2019 в 01:52

Другие вопросы по тегам:

Похожие вопросы: