处理各种子目录中的所有文件的脚本

问题描述

尝试对位于多个子目录(具有不同深度)中的文件执行脚本。 我使用带参数的脚本,尝试过:

for i in "/home/working_dir_with_subdirs"/* ; do
     /opt/my_script -e -x "$i" "$i"/* "$i"/..
done

但脚本只加载了主目录 /home/working_dir_with_subdirs 中的文件。子目录中的文件未加载,在终端中我看到脚本试图将子目录作为输入文件执行,而不是目录中的文件

找到了一些使用 find 命令的示例,但子目录中的文件具有不同的扩展名。

解决方法

一种解决方案是使用 findxargs

find /home/working_dir_with_subdirs/ -type f -print0 |
  xargs -0 -n1 /opt/my_script -e -x

这将对位于 /opt/my_script 及其子目录中的每个文件调用一次 /home/working_dir_with_subdirs

如果您的脚本可以接受多个文件作为参数,您可以删除 -n1

find /home/working_dir_with_subdirs/ -type f -print0 |
  xargs -0 /opt/my_script -e -x

这将使用多个文件作为参数调用您的脚本,而不是每个文件一次。

在这两种情况下,-print0 上的 find-0 上的 xargs 将正确处理包含空格的文件名。