如何以递归方式列出 (ls) 文件夹/目录的内容,但深度仅为一个文件夹/目录?
我有以下文件夹结构:
folderA:
folderB1:
folderC1:
fileD1:
fileD2:
fileC2
fileC3
folderB2:
folderC4:
fileD3:
fileD4:
fileC5
fileC6
我位于 的父文件夹中folderA
,希望列出其中及其子文件夹中的所有内容,但不列出子子文件夹。所以我想看到:
folderB1/folderC1
folderB1/fileC2
folderB1/fileC3
folderB2/folderC2
folderB2/fileC4
folderB2/fileC5
那可能吗?目前,我使用ls -R folderA
它让我陷入了一个由数百个我不感兴趣的子文件夹组成的兔子洞。我想停在一定的深度。理想情况下,会有一个选项,例如depth 1
列出folderA及其子文件夹的内容并停止。
我正在 macOS X High Sierra 上工作。
答案1
你不想要一个递归的那么,因为正如您所看到的,递归意味着“到最后”,而不是“到某个任意停止点”。
要在folderA 的父级中列出folderA 下的两个级别,
(cd folderA && ls -d -- */*)
它的关键是*/*
通配符/通配符;它要求 shell 生成所有直接子目录(带有*/
),然后生成其所有条目(最后的*
)。
重要的是,我们必须ls
告诉不是如果最后的条目恰好是目录,则展开它们;我们用-d
旗帜来做到这一点。
最后一部分,为了获得您正在寻找的输出格式,我通过启动一个子shell来解决,我们cd
进入folderA以进行列表。一旦ls
退出,子shell就会退出,我们将返回到当前的提示符和目录(文件夹A上方)。