linux - 遍历 bash 主文件夹内子文件夹中的文件

标签 linux bash

<分区>

问题很简单,我知道如何在 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 万)个字符。所以限制很高,但值得记住的是存在一个限制。

关于linux - 遍历 bash 主文件夹内子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958689/

相关文章:

linux - 无法在共享主机上运行 wkhtmltopdf

php - 阻止 nginx 重定向到 index.php

linux - 特定目录和大小的文件列表 - linux 命令

regex - Bash 脚本 find/sed 不起作用

linux - 使用 Bash 获取特定文件的 mtime?

linux - bash 通过 ssh 在远程主机上运行多个命令

c++ - 如何在 Ubuntu 14.04 中安装 Qt 3.3.8

linux - 如何在 awk 中转义 {}?

bash - curl --output 追加到文件(无 >> 重定向)

linux - 从 Bash 输出中隐藏 "Directory and Bash Directory"