问题描述
尝试对位于多个子目录(具有不同深度)中的文件执行脚本。 我使用带参数的脚本,尝试过:
for i in "/home/working_dir_with_subdirs"/* ; do
/opt/my_script -e -x "$i" "$i"/* "$i"/..
done
但脚本只加载了主目录 /home/working_dir_with_subdirs
中的文件。子目录中的文件未加载,在终端中我看到脚本试图将子目录作为输入文件执行,而不是目录中的文件。
找到了一些使用 find
命令的示例,但子目录中的文件具有不同的扩展名。
解决方法
一种解决方案是使用 find
和 xargs
:
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
将正确处理包含空格的文件名。