Сценарий ниже будет делать именно так, как вы описываете, это:
- перечисляет папки внутри каталога
Заглядывает в каждую из папок для папки с именем "Запись"
- Если он существует и пуст, он удаляет свою верхнюю папку
- если он не существует, он также удаляет свою верхнюю папку
- файлы на первом уровне внутри A не будут удалены.
На изображении:
A
|
|--------123456
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------123456
| |----Recording
| |----a.txt
| |----b.txt
|
|--------Monkey.txt
приведет к:
A
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------Monkey.txt
Сценарий
#!/usr/bin/env python3
import os
import sys
import shutil
dr = sys.argv[1]
def path(*args):
return os.path.join(*args)
for d in os.listdir(dr):
try:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
except FileNotFoundError:
shutil.rmtree(path(dr,d))
except NotADirectoryError:
pass
Использовать
- Скопируйте скрипт в пустой файл, сохраните его как
delete_empty.py
Запустите его с каталогом (full!) (Содержащим ваши подкаталоги, A в вашем примере) в качестве аргумента команды:
python3 /path/to/delete_empty.py /path/to/directory
Вот и все.
объяснение
Подача содержимого вашей папки «А» в скрипт,
os.listdir(dr)
перечислит свои подкаталоги (и файлы). Потом:
if not os.listdir(path(dr, d, "Recording"))
попытается перечислить содержимое каждой из (под) папок, что вызовет ошибку, если элемент является файлом:
except NotADirectoryError
pass
или если папка «Запись» вообще не существует:
FileNotFoundError
shutil.rmtree(path(dr,d))
Если папка «Запись» существует и пуста, верхняя папка удаляется:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
РЕДАКТИРОВАТЬ
Кроме того, как требуется в комментариях, версия, которая будет проверять наличие нескольких подкаталогов (имен).
Если каталог содержит какой-либо из перечисленных (не пустых) подкаталогов, каталог сохраняется. В противном случае он будет удален.
Использовать
- Скопируйте скрипт в пустой файл, сохраните его как
delete_empty.py
Запустите его с каталогом (full!) (Содержащим ваши подкаталоги, A в вашем примере) и именами подкаталогов в качестве аргументов команды:
python3 /path/to/delete_empty.py /path/to/directory <subdir1> <subdir2> <subdir3>
Вот и все.
Сценарий
#!/usr/bin/env python3
import shutil
import os
import sys
dr = sys.argv[1]; matches = sys.argv[2:]
def path(*args):
return os.path.join(*args)
for d in os.listdir(dr):
# delete directory *unless* either one of the listed subdirs has files
keep = False
# check for each of the listed subdirs(names)
for name in matches:
try:
if os.listdir(path(dr, d, name)):
keep = True
break
except NotADirectoryError:
# if the item is not a dir, no use for other names to check
keep = True
break
except FileNotFoundError:
# if the name (subdir) does not exist, check for the next
pass
if not keep:
# if there is no reason to keep --> delete
shutil.rmtree(path(dr,d))
Заметка
Пожалуйста, сначала запустите тестовый каталог, чтобы убедиться, что он делает именно то, что вы хотите.