Команды или сценарий для очистки медиа-папки от нежелательных типов файлов

У меня есть папка загрузки мультимедиа со всеми видами нерелевантных файлов, например. readme, txt и torrent-файлы в дополнение к mp4, avi, mp3 и другим допустимым медиафайлам.

Мне нужен скрипт или набор команд, которые я могу запустить, чтобы очистить его через cron или что-то на регулярной основе и пройти через все каталоги и подкаталоги, удаляя ненужные файлы.

1
задан 22 April 2015 в 23:13

2 ответа

Исходя из того, что у нас так далеко от вашего вопроса:

Найти и удалить:

Если вы хотите удалить все файлы, имеющие расширение .txt или .torrent:

find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +

Альтернативно, если вы хотите удалить все файлы, у которых нет .mp3, .mp4 или .avi extension:

find /path/to/dir -type f -not \( -name '*.mp3' -o -name '*.mp4' -o -name '*.avi' \) -execdir rm {} +

Здесь мы использовали find с параметром OR -o для получения наших желаемых файлов, когда мы нашли файлы, которые мы удалили, вызвав один экземпляр rm.

Найти и удалить:

Если вы хотите запустить его как задание cron, вы можете поместить эту команду в запись вашего пользователя crontab когда вы хотите cron запустить это. Например, чтобы запустить это в воскресенье 23:00 каждую неделю:

00 23 * * 0 find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +
2
ответ дан 23 May 2018 в 21:08
  • 1
    Вам не нужно беспокоиться о специальных символах с помощью -execdir. A -execdir rm {} + является -print0 | xargs -0 rm, без посредника - find обеспечит правильную передачу аргументов. – muru 23 April 2015 в 01:03
  • 2
    @muru: Спасибо .. не знаю, что .. из manpage any given invocation of command will only list files that exist in the same subdirectory .. это подводит итог красиво .. – heemayl 23 April 2015 в 01:06

Сценарий ниже рекурсивно очищает ваш каталог. Его можно запустить с помощью cron или комбинации клавиш быстрого доступа. Это просто:

Скопируйте его в пустой файл, сохраните его как clean_up.py. В разделе заголовка скрипта установите расширения для удаления в строке:
remove = [".txt", ".log"]
Запустите его command:
python3 /path/to/clean_up.py <directory_to_clean_up>

Сценарий:

#!/usr/bin/env python3
import os
import sys

#--- set the extensions to remove below
remove = [".txt", ".log"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if any([file.endswith(s) for s in remove]):
            os.remove(file)

Отрицательная опция

Если вы хотите сделать это наоборот: только сохраняйте (extensions), удалите все остальные, используйте сценарий (версия) ниже:

#!/usr/bin/env python3
import os
import sys

#--- add all extensions you'd like to keep below
keep = [".mp4", ".mp3"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if all([not file.endswith(s) for s in keep]):
            os.remove(file)

Чтобы добавить один из приведенных выше сценариев в ярлык: Выберите: «Системные настройки»> «Клавиатура» ">" Ярлыки ">" Пользовательские ярлыки ". Нажмите «+» и добавьте команду:

python3 /path/to/clean_up.py <directory_to_clean_up>
2
ответ дан 23 May 2018 в 21:08
  • 1
    Этот ответ одинаково сочный, спасибо. Мне нравится идея использования командной строки, показанной выше heemayl, для которой я могу создать псевдоним. Еще раз спасибо. – Norman Bird 23 April 2015 в 03:14

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

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