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

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

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

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

3 ответа

Создайте файл с расширениями, которые Вы хотите удалить, один на строку (скажите, dontwant.files):

.txt
.nfo
.torrent
.csv

Объединение find с grep, xargs и rm:

find /path/to/media/directory -type f -print0 |
  grep -zFf /path/to/dontwant.files |
  xargs -0 rm
  • find с -type f и -print0 распечатает названия всех файлов, которые это находит разделенным символом ASCII NUL - единственный, который совершенно безопасен для разграничивания путей и имен файлов.
  • grepс -z разделяет строки символом ASCII NUL, так, чтобы каждое имя файла, произведенное find рассматривается как отдельную строку. -F отключает соответствие regex, и -f чтения в шаблонах из файла.
  • xargs с -0 чтения в строках, разделенных символами ASCII NUL, и, используют их в качестве аргументов в пользу команды в этом случае rm.

Это легко преобразовывается в другой подход (удалите все кроме некоторых расширений). Например, с файлом как want.files, содержа:

.mp4
.srt
.avi
.mp3

только grep управляйте изменением потребностей, использованием -v инвертировать соответствия:

grep -vzFf /path/to/want.files |
5
ответ дан 23 April 2015 в 09:13

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

  1. Скопируйте его в пустой файл, сохраните его как clean_up.py
  2. В главном разделе сценария, набор расширения для удаления, в строке:

    remove = [".txt", ".log"]
    
  3. Выполните его командой:

    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)

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

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

#!/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 April 2015 в 09:13

На основе того, что мы имеем так далеко от Вашего вопроса:

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

Если Вы хотите удалить все наличие файлов .txt или .torrent расширение:

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

Поочередно, если Вы хотите удалить все файлы, которые не имеют .mp3, .mp4 или .avi расширение:

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

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

Крон:

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

00 23 * * 0 find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +
2
ответ дан 23 April 2015 в 09:13

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

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