Le script ci-dessous fera exactement ce que vous décrivez, il:
- répertorie les dossiers dans un répertoire
Recherche dans chacun des dossiers un dossier nommé "Enregistrement"
- S'il existe et est vide, il supprime son dossier supérieur
- s'il n'existe pas , il supprime également son dossier supérieur
- les fichiers du premier niveau à l'intérieur de A ne seront pas supprimés.
Dans une image:
A
|
|--------123456
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------123456
| |----Recording
| |----a.txt
| |----b.txt
|
|--------Monkey.txt
aura pour résultat:
A
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------Monkey.txt
Le scénario
#!/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
Utiliser
- Copiez le script dans un fichier vide, enregistrez-le sous
delete_empty.py
Exécutez-le avec le répertoire (complet!) (Contenant vos sous-répertoires, A dans votre exemple) comme argument par la commande:
python3 /path/to/delete_empty.py /path/to/directory
C'est ça.
Explication
Alimenter le contenu de votre dossier "A" dans le script,
os.listdir(dr)
listera ses sous-répertoires (et fichiers). Puis:
if not os.listdir(path(dr, d, "Recording"))
va essayer de lister le contenu de chacun des (sous-) dossiers, ce qui déclenchera une erreur si l'élément est un fichier:
except NotADirectoryError
pass
ou si le dossier "Enregistrement" n'existe pas du tout:
FileNotFoundError
shutil.rmtree(path(dr,d))
Si le dossier "Enregistrement" existe et est vide, le dossier supérieur est supprimé:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
ÉDITER
En outre, comme demandé dans les commentaires, une version qui vérifiera plusieurs sous-répertoires (noms).
Dans le cas où le répertoire contient l' un des sous-répertoires (non vides) répertoriés, le répertoire est conservé. Sinon, il sera supprimé.
Utiliser
- Copiez le script dans un fichier vide, enregistrez-le sous
delete_empty.py
Exécutez-le avec le répertoire (complet!) (Contenant vos sous-répertoires, A dans votre exemple) et les noms des sous-répertoires comme arguments par la commande:
python3 /path/to/delete_empty.py /path/to/directory <subdir1> <subdir2> <subdir3>
C'est ça.
Le scénario
#!/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))
Remarque
Veuillez d'abord exécuter sur un répertoire de test pour vous assurer qu'il fait exactement ce que vous voulez.