问题很简单,我知道如何在 Python 中完成,但我想在 Linux shell (bash) 中完成。
我有一个主文件夹 Dataset
,其中有多个子文件夹 Dataset_FinalFolder_0_10
,一直到 Dataset_FinalFolder_1090_1100
,每个子文件夹有 10 个文件。
我想对每个文件运行一个程序。在 Python 中,我会用类似的东西来做到这一点:
for folder in /path/to/folders:
for file in folder:
run program
有什么办法可以在 Shell/bash 中模仿这个吗?
我有这段代码用于更直接的迭代:
for i in /path/to/folder/*;
do program "$i";
done
提前致谢
如果您确定文件夹中没有文件,也没有文件夹中有文件:
for folder in /path/to/Dataset/*; do
for file in "$folder"/*; do
program "$file"
done
done
或者,可以提供多个*
:
for file in /path/to/Dataset/*/*; do
program "$file"
done
如果您不确定文件夹的内容,find
可以提供帮助。此示例仅选择给定文件夹的第一级子目录中的文件,xargs 为每个子目录调用程序:
find /path/to/Dataset/ -mindepth 2 -maxdepth 2 -type f |\
xargs -n1 program
如果 .../*/*/*/...
可以扩展到大量路径,则 find 方法也可能有用。在 Linux 上,命令行长度限制显示为:
getconf ARG_MAX
在我的机器上是 2^21(约 200 万)个字符。所以限制很高,但值得记住的是存在一个限制。