在 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
值并在循环之后恢复它。