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

Script working on all files in various subdirectories

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

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

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

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

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

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

在这两种情况下,find 上的 -print0xargs 上的 -0 都是为了正确处理包含空格的文件名。