O script abaixo fará exatamente como você descreve:
- lista as pastas dentro de um diretório
Procura dentro de cada uma das pastas uma pasta chamada "Gravação"
- Se existir e estiver vazio, ele excluirá sua pasta superior
- se não existir, também excluirá sua pasta superior
- arquivos no primeiro nível dentro de A não serão excluídos.
Em uma imagem:
A
|
|--------123456
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------123456
| |----Recording
| |----a.txt
| |----b.txt
|
|--------Monkey.txt
vai resultar em:
A
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------Monkey.txt
O script
#!/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
Usar
- Copie o script em um arquivo vazio, salve-o como
delete_empty.py
Execute-o com o diretório (completo!) (Contenha seus subdiretórios, A no seu exemplo) como argumento pelo comando:
python3 /path/to/delete_empty.py /path/to/directory
É isso aí.
Explicação
Alimentando o conteúdo da sua pasta "A" para o script,
os.listdir(dr)
listará seus subdiretórios (e arquivos). Então:
if not os.listdir(path(dr, d, "Recording"))
tentará listar o conteúdo de cada uma das (sub) pastas, o que gerará um erro se o item for um arquivo:
except NotADirectoryError
pass
ou se a pasta "Gravação" não existir:
FileNotFoundError
shutil.rmtree(path(dr,d))
Se a pasta "Gravação" existir e estiver vazia, a pasta superior será removida:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
EDITAR
Além disso, conforme solicitado nos comentários, uma versão que procurará vários subdiretórios (nomes).
Caso o diretório contenha qualquer um dos subdiretórios listados (não vazios), o diretório será mantido. Caso contrário, ele será excluído.
Usar
- Copie o script em um arquivo vazio, salve-o como
delete_empty.py
Execute-o com o diretório (completo!) (Contendo seus subdiretórios, A no seu exemplo) e os nomes dos subdiretórios como argumentos pelo comando:
python3 /path/to/delete_empty.py /path/to/directory <subdir1> <subdir2> <subdir3>
É isso aí.
O script
#!/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))
Nota
Primeiro, execute um diretório de teste para garantir que ele faça exatamente o que você deseja.