Aşağıdaki komut dosyası tam olarak açıkladığınız gibi olacaktır:
- bir dizindeki klasörleri listeler
"Kayıt" adlı bir klasör için klasörlerin her birinin içine bakar
- Varsa ve boşsa, üst klasörünü siler
- o eğer değil mevcut, aynı zamanda üstün bir klasör siler
- A'nın içindeki ilk düzeydeki dosyalar silinmeyecektir.
Bir resimde:
A
|
|--------123456
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------123456
| |----Recording
| |----a.txt
| |----b.txt
|
|--------Monkey.txt
sonuçlanacak:
A
|
|
|--------635623
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------Monkey.txt
Senaryo
#!/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
Kullanmak
- Komut dosyasını boş bir dosyaya kopyalayın,
delete_empty.py
Komut tarafından bağımsız değişken olarak (full!) Diziniyle (alt dizinlerinizde containin, örneğinizde A ile) çalıştırın:
python3 /path/to/delete_empty.py /path/to/directory
Bu kadar.
açıklama
"A" klasörünüzün içeriğini komut dosyasına beslemek,
os.listdir(dr)
alt dizinlerini (ve dosyalarını) listeler. Sonra:
if not os.listdir(path(dr, d, "Recording"))
(alt) klasörlerin her birinin içeriğini listelemeye çalışır; bu, öğe bir dosya ise bir hata oluşturur:
except NotADirectoryError
pass
veya "Kayıt" klasörü hiç mevcut değilse:
FileNotFoundError
shutil.rmtree(path(dr,d))
"Kayıt" klasörü varsa ve boşsa, üst klasör kaldırılır:
if not os.listdir(path(dr, d, "Recording")):
shutil.rmtree(path(dr,d))
DÜZENLE
Ayrıca, yorumlarda istendiği gibi, birden çok alt dizini (adı) kontrol edecek bir sürüm.
Dizinin , listelenen (boş olmayan) alt dizinlerden herhangi birini içermesi durumunda, dizin tutulur. Aksi takdirde silinecektir.
Kullanmak
- Komut dosyasını boş bir dosyaya kopyalayın,
delete_empty.py
(Full!) Diziniyle (örneğinizde alt dizinlerinizi, A'yı içerir) ve alt dizinlerin adlarını komutla bağımsız değişken olarak çalıştırın:
python3 /path/to/delete_empty.py /path/to/directory <subdir1> <subdir2> <subdir3>
Bu kadar.
Senaryo
#!/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))
Not
Lütfen tam olarak ne istediğinizi yaptığından emin olmak için bir test dizininde çalıştırın.