如何仅列出给定路径中没有子文件夹的文件夹?

Tej*_*jas 3 command-line directory find

问题:我已经给出了目录结构

??? kat11
?   ??? kat21
?   ?   ??? Dokument\ bez\ nazwy
?   ??? kat22
?       ??? kat31
?       ?   ??? Dokument\ bez\ nazwy
?       ??? kat32
?           ??? Dokument\ bez\ nazwy
??? kat12
?   ??? kat21
?       ??? Dokument\ bez\ nazwy
??? kat13
?   ??? Dokument\ bez\ nazwy
??? kat14
    ??? Kat21
        ??? Kat32
            ??? Dokument\ bez\ nazwy
Run Code Online (Sandbox Code Playgroud)

我只想列出所有具有完整路径的子文件夹。

例如

1. /kat14/kat21/kat32/Dokument\ bez\ nazwy
2. /kat11/kat22/kat31/Dokument\ bez\ nazwy
3. /kat11/kat22/kat32/Dokument\ bez\ nazwy
4. /kat12/kat21/Dokument\ bez\ nazwy
Run Code Online (Sandbox Code Playgroud)

Jac*_*ijm 6

在一个小的python脚本中:

 #!/usr/bin/env python3
import os
import sys

src = sys.argv[1]
for root, dirs, files in os.walk(src):
    for dr in dirs:
        directory = root+"/"+dr
        if len([sub for sub in os.listdir(directory) \
                if os.path.isdir(directory+"/"+sub)]) == 0:
            print(directory)
Run Code Online (Sandbox Code Playgroud)

使用它

这个怎么运作

  • python'sos.walk()遍历目录和子目录
  • 线

    if len([sub for sub in os.listdir(directory) if os.path.isdir(directory+"/"+sub)]) == 0:
    
    Run Code Online (Sandbox Code Playgroud)

    随后计算每个子目录的数量。如果为零(无子目录),则打印目录及其路径。

在我桌面上的一个简单包文件夹上进行测试:

python3 /path/to/count_empty.py '<source_directory>'
Run Code Online (Sandbox Code Playgroud)