使用exec来实现
由于find
命令的 -path
选项不能递归地查找子目录中的文件,要在当前路径下的 target
目录及其子目录中查找 .jar
文件并进行传输,可以改用 -name
选项结合 -exec
来实现。以下是改写的示例:
find . -type d -name 'target' -exec find {} -name '*.jar' \; | xargs -I {} scp {} root@172.16.3.253:/home/docker-nginx/html/KjghMicroservice/kjghMicroservice-dev/1.0.0
在这个示例中,第一个 find
命令用于查找当前路径及其子目录中的 target
目录。然后,通过 -exec
选项执行第二个 find
命令,该命令在每个匹配的 target
目录中查找 .jar
文件。最后,结果通过管道传递给 xargs
命令,并执行 scp
命令来传输文件。
请确保在执行脚本之前,路径和凭据等参数已正确设置,并具备执行 scp
命令的权限。
使用xargs来实现
也可以使用 xargs
命令结合 find
命令来实现替代 -exec
的方法。以下是一个示例:
find . -type d -name 'target' -print0 | xargs -0 -I {} find {} -name '*.jar' | xargs -I {} scp {} root@192.168.100.101:${root_dir}
在这个示例中,第一个 find
命令用于查找当前路径及其子目录中的 target
目录,并使用 -print0
选项以空字符作为分隔符输出结果。然后,通过管道将结果传递给 xargs
命令,使用 -0
选项以空字符作为分隔符,-I {}
指定占位符,将每个 target
目录传递给下一个 find
命令。第二个 find
命令在每个 target
目录中查找 .jar
文件。最后,将结果传递给第二个 xargs
命令,并执行 scp
命令来传输文件。
请确保在执行脚本之前,路径和凭据等参数已正确设置,并具备执行 scp
命令的权限。