Script di bawah ini akan melakukan persis seperti yang Anda gambarkan, yaitu:
- daftar folder di dalam direktori
Lihat di dalam setiap folder untuk folder bernama "Perekaman"
- Jika ada dan kosong, ia menghapus folder superiornya
- jika tidak ada, ia juga menghapus folder superiornya
- file di tingkat pertama di dalam A tidak akan dihapus.
Dalam sebuah gambar:
A
|
|--------123456
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------123456
| |----Recording
| |----a.txt
| |----b.txt
|
|--------Monkey.txt
akan menghasilkan:
A
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------Monkey.txt
Naskah
#!/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
Menggunakan
- Salin skrip ke file kosong, simpan sebagai
delete_empty.py
Jalankan dengan direktori (penuh!) (Berisi dalam subdir Anda, A dalam contoh Anda) sebagai argumen dengan perintah:
python3 /path/to/delete_empty.py /path/to/directory
Itu dia.
Penjelasan
Mengumpankan konten folder Anda "A" ke skrip,
os.listdir(dr)
akan mendaftar subdirektori (dan file). Kemudian:
if not os.listdir(path(dr, d, "Recording"))
akan mencoba membuat daftar konten dari masing-masing folder (sub), yang akan menimbulkan kesalahan jika item tersebut adalah file:
except NotADirectoryError
pass
atau jika folder "Rekaman" tidak ada sama sekali:
FileNotFoundError
shutil.rmtree(path(dr,d))
Jika folder "Rekaman" ada dan kosong, folder superior dihapus:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
EDIT
Selain itu, seperti yang diminta dalam komentar, versi yang akan memeriksa beberapa subdir (nama).
Jika direktori berisi salah satu dari subdir yang terdaftar (kosong), direktori tersebut disimpan. Jika tidak maka akan dihapus.
Menggunakan
- Salin skrip ke file kosong, simpan sebagai
delete_empty.py
Jalankan dengan direktori (penuh!) (Berisi subdir Anda, A dalam contoh Anda) dan nama-nama subdirs sebagai argumen dengan perintah:
python3 /path/to/delete_empty.py /path/to/directory <subdir1> <subdir2> <subdir3>
Itu dia.
Naskah
#!/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))
Catatan
Pertama jalankan di direktori tes untuk memastikan itu melakukan apa yang Anda inginkan.