Это для моего медиасервера:
У меня есть папка, содержащая все мои сериалы, и для некоторых шоу, я сохраняю затем неограниченно долго, в то время как другие, я хотел бы вычистить медиа-файлы, поскольку они поражают 90-дневный возраст.
Таким образом, я хотел бы заполнить список шоу их путем, что я хочу быть очищенным после 90 дней в файле TXT и запланированном сценарии, который будет ежедневно пробегать тот список.
Таким образом, я могу добавить или удалить шоу из списка TXT и затем знать, что что-либо в том списке, который у меня есть 90 дней для наблюдения перед эпизодами того шоу, удалено.
Конечно, я хотел бы очистить видеофайлы и не других, как сезонные папки, иллюстрации и т.д. Так типичный список расширений - mkv, mp4, mpg, mpeg, avi, xvid, ts пойдет, но не структура папок.
Я нашел много практического руководства для чистки файлов более старым, чем X дней, но не что-то это конкретный.
Когда у меня были свои медиа-файлы в Windows PC, я запустил простую названную программу, автоудаляют, где Вы указали папки и дни и расширения, и это заботилось о вещах, но начиная с перемещения к Ubuntu, я не нашел то же.
Любая справка ценится.
Нет никакой потребности ни в какой дополнительной программе или даже сценарии, 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'
сначала позволить только символ новой строки как разделитель для аргументов.
Хорошо, вот моя обратная связь.
Да, работы сценария, но с большим предупреждением.
Если "удалить" файл не будет найден, то он будет работать успешно, так или иначе, но против любого и всех файлов и относится везде, где Вы, оказывается, сидите в командной строке.
Я пытался вставить кавычки удалить файл, обработать интервал, но он не взял это хорошо. Таким образом, я выполнил Ваше предложение.
Вот точная команда, как управляемая:
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
Я действительно получал результаты, которые я ожидал, таким образом, это, действительно кажется, работает.