아래 스크립트는 설명대로 정확하게 작동합니다.
- 디렉토리 안의 폴더를 나열합니다
각 폴더 내부에서 "Recording"이라는 폴더를 찾습니다.
- 존재 하고 비어 있으면 상위 폴더를 삭제합니다.
- 존재 하지 않으면 상위 폴더도 삭제합니다.
- 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
그게 다야.
설명
폴더 "A"의 내용을 스크립트에 공급
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))
노트
먼저 테스트 디렉토리에서 실행하여 원하는대로 정확하게 수행하십시오.