如何在 Mac 终端中获取文件夹中的所有子文件夹?

如何在 Mac 终端中获取文件夹中的所有子文件夹?

在 Mac 终端中,有没有办法枚举文件夹中的所有子文件夹?我的目标是在文件夹中的每个子文件夹中执行某些操作,如下所示 sudocode:

for subfolders in folder
    do something
end

这是文件夹的结构

-folder 
    -subfolder1
    -subfolder2
    -subfolder3

这个问题和这里的问题有点相似在 Windows 中有没有办法获取文件夹中所有文件和文件夹的列表?,但我没有找到针对 macos 的答案。

非常感谢您的任何建议!

答案1

您可以使用几个不同的 shell 命令来查找子文件夹集,然后遍历它们来执行某些操作。我倾向于使用find命令,因为它允许您设置条件以匹配具有特定深度的文件或文件夹,根据文件/文件夹的类型、名称、修改日期等排除它们。

请记住,在更改项目(例如重命名子文件夹)的同时遍历文件列表有时会导致奇怪的行为。为了简单起见,我们假设您只是在每个目录中执行一些只读操作。

% for dir in $(find "/path/to/folder" -depth 1 -type d); do
    cd $dir
    echo "Doing something in $dir..."
done

find命令匹配指定路径下深度为 1(即不搜索多于一层的子文件夹)且类型为d(目录)的文件。如果您想要所有嵌套文件夹或包含文件,您可以更改或删除这些选项。(默认情况下find将搜索所有深度并匹配文件和文件夹。)

然后在循环内部cd依次切换到每个目录,我们只是将其用作echo您可能想要在每个文件夹内执行的操作的演示。(如果您需要操作的目录的简称,则可以使用basename $dir。)

注意:由于此脚本使用cd,它会将终端留在循环期间找到的最后一个文件夹中。如果要将其放入实际使用的脚本中,您要么不使用cd,要么在循环之前保存该$PWD值并在循环之后恢复它。

相关内容