处理各种子目录中所有文件的脚本
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
命令找到了一些例子,但是子目录中的文件有不同的扩展名。
一种解决方案是使用 find
和 xargs
:
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
上的 -print0
和 xargs
上的 -0
都是为了正确处理包含空格的文件名。
正在尝试对位于多个子目录(具有不同深度)的文件执行脚本。 我正在使用带参数的脚本,已尝试:
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
这将为 /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
上的 -print0
和 xargs
上的 -0
都是为了正确处理包含空格的文件名。