Bash - 如何循环子目录并提取文件

Bash - 如何循环子目录并提取文件

我有一个名为 10K_TIF 的目录(主目录)。该主目录中有多个子目录,每个子目录都包含 tif 图像。我想读取每个 TIF 图像并使用 bash 命令提取其路径。 10K_TIF 大小超过 15TB。

样本:

10K_TIF/4320cc/4320cc_01_rectified.tif
10K_TIF/4320cc/4320cc_02_rectified.tif
10K_TIF/4520cc/4520cc_01_rectified.tif
10K_TIF/4520cc/4520cc_02_rectified.tif

我设法回显每个子目录,还设法回显所有 tif 图像,但这些图像位于单独的命令中。

答案1

您可以使用find

find 10K_TIF -iname '*TIF'

要循环结果并对每个图像执行某些操作,您可以使用:

find 10K_TIF -iname '*TIF' | while read tif; do echo "Found: $tif"; done

上面假设文件名正常,没有空格或奇怪的字符。如果您的文件名可以包含此类字符,请改用以下字符:

find 10K_TIF -iname '*TIF' -print0 | 
    while IFS= read -r -d '' tif; do echo "Found: $tif"; done

答案2

find 10K_TIF -iname "*.tif"

如果你想处理每个文件,比如查找文件的内容类型

find 10K_TIF -iname "*.tif" -print0 | xargs -0 -n1 file

或者计算md5sum

find 10K_TIF -iname "*.tif" -print0 | xargs -0 -n1 md5sum

答案3

如果您想(仅)列出所有子目录中的所有 *.tiff 文件,bash最容易使用**模式(globstar):

shopt -s globstar
ls **/*.tiff

答案4

您可以find用于查找所有文件并将它们传递给您想要使用的任何命令

find 10K_TIF -iname "*.tif" -type f -print0 | xargs -0 -n1 <command>

这会搜索10K_TIF所有子目录,匹配以.tif(不区分大小写)结尾的所有内容.tif是一个常规文件(即不处理目录、特殊文件和以 结尾的符号链接)。

例如,如果您想处理符号链接和常规文件,您可以使用

find 10K_TIF -iname "*.tif" \( -type f -o -type l \) -print0 | xargs -0 -n1 <command>

相关内容