如何以递归方式列出 (ls) 文件夹/目录的内容,但深度仅为一个文件夹/目录?

如何以递归方式列出 (ls) 文件夹/目录的内容,但深度仅为一个文件夹/目录?

如何以递归方式列出 (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上方)。

相关内容