如何将服务器中同名target目录下的*.jar文件复制到指定目录(排除子目录)
服务器指定Jar文件批量复制解决方案
需求说明
将服务器中所有名为target的目录下直接存放的*.jar文件复制到/home/Test Folder目录,排除target子目录内的文件。
现有命令问题
你提供的尝试命令存在几个问题:
- 错误筛选了
.war文件(grep .war),与需求的复制.jar文件不符 - 使用
execdir ls的方式处理文件名存在风险(比如文件名含空格会导致命令执行出错) - 目标路径写为
/home/test,和需求中的/home/Test Folder不一致 - 未限制搜索深度,可能会包含
target子目录里的文件
正确命令示例
方法一:双层find命令
find / -name "target" -type d -exec find {} -maxdepth 1 -type f -name "*.jar" -exec cp {} "/home/Test Folder" \; \;
方法二:结合xargs处理特殊文件名
如果存在文件名含空格、特殊字符的情况,用更健壮的写法:
find / -name "target" -type d -exec find {} -maxdepth 1 -type f -name "*.jar" -print0 \; | xargs -0 cp -t "/home/Test Folder"
命令解释
/:从根目录开始搜索,可替换为你需要的起始搜索目录(比如当前目录用.)-name "target" -type d:精准匹配所有名为target的目录-maxdepth 1:限制在target目录的当前层级搜索,不进入子目录-type f -name "*.jar":筛选出所有jar格式的普通文件-print0和xargs -0:处理文件名含空格、特殊字符的场景,避免命令执行报错-t "/home/Test Folder":指定复制的目标目录,因目录名带空格需用引号包裹
内容的提问来源于stack exchange,提问作者aws_techy
相关产品推荐
相关产品推荐

