У меня есть папка для загрузки мультимедиа со всеми видами ненужных файлов, например, файлы readme, txt и torrent в дополнение к mp4, avi, mp3 и другим действительным медиа-файлам.
Мне нужен скрипт или набор команд, которые я могу запустить, чтобы очистить его через cron
или что-то на регулярной основе и пройти через все каталоги и подкаталоги, удаляя ненужные файлы.
Создайте файл с расширениями, которые Вы хотите удалить, один на строку (скажите, 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 |
Сценарий ниже уборок Ваш каталог рекурсивно. Это может быть выполнено от также cron
или комбинация сочетания клавиш. Использование просто:
clean_up.py
В главном разделе сценария, набор расширения для удаления, в строке:
remove = [".txt", ".log"]
Выполните его командой:
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>
На основе того, что мы имеем так далеко от Вашего вопроса:
Найдите и удалите:
Если Вы хотите удалить все наличие файлов .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 {} +