Удалить файлы и папки с определенным именем из определенного каталога
У меня есть папка /home/userA/folderA
эта папка содержит много файлов, папок и подпапок. Что я хочу сделать, это удалить все файлы с определенными именами data.txt
а также glass.txt
, Я также хочу удалить любую папку с именем match
со всем его содержанием. Буду благодарен за любой совет, как это сделать.
3 ответа
Вы можете удалить файлы и папки в подкаталогах folderA
,
Чтобы удалить файлы, запустите:
find /home/userA/folderA/* -type f \( -name "data.txt" -or -name "glass.txt" \) -delete
и удалить папки match
:
find /home/userA/folderA/* -depth -name "match" -type d -exec rm -rf "{}" \;
И подробный (python) вариант:
#!/usr/bin/env python3
import os
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/your/folder"
remove_files = ("data.txt", "glass.txt")
remove_dirs = ("match")
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
if name in remove_files:
os.remove(root+"/"+name)
for dr in dirs:
if dr in remove_dirs:
shutil.rmtree(root+"/"+dr)
Скопируйте скрипт в пустой файл, установите каталог и, если хотите / нуждаетесь: отредактируйте список файлов и папок, которые нужно удалить, сохраните его как reorg.py и запустите его командой:
python3 /path/to/reorg.py
Вы можете просто выполнить следующую команду (будьте осторожны и перепроверьте все, потому что это необратимо!). Это удалит все файлы, в которых есть слово data или glass, которые являются файлами.txt.
sudo rm -rf /home/userA/folderA/*data*.txt
sudo rm -rf /home/userA/folderA/*glass*.txt
Вы можете найти любую папку с именем match, используя команду locate:
locate match
Как только вы найдете пути, просто выполните команду выше для всей папки
sudo rm -rf /path/to/match
Бест, Лев