如何在Linux cp命令中通过AND/OR条件控制,按需复制jar和war文件
实现指定目录下jar/war文件的条件复制
核心思路
通过Shell条件判断先检查源目录中jar和war文件的存在性,再根据情况执行对应cp命令:
- 无jar文件时,仅复制war文件
- 无war文件时,仅复制jar文件
- 两者都存在时,同时复制两类文件
脚本实现(推荐,易维护)
创建Shell脚本,替换SOURCE和TARGET为实际路径即可使用:
#!/bin/bash # 替换为你的源目录和目标目录 SOURCE="/path/to/your/source/dir" TARGET="/path/to/your/target/dir" # 检查是否存在jar文件(仅匹配文件,排除目录) has_jar=$(compgen -G "$SOURCE/*.jar" > /dev/null; echo $?) # 检查是否存在war文件 has_war=$(compgen -G "$SOURCE/*.war" > /dev/null; echo $?) if [ $has_jar -ne 0 ]; then # 不存在jar,仅复制war cp "$SOURCE"/*.war "$TARGET" elif [ $has_war -ne 0 ]; then # 不存在war,仅复制jar cp "$SOURCE"/*.jar "$TARGET" else # 两者都存在,同时复制 cp "$SOURCE"/*.jar "$SOURCE"/*.war "$TARGET" fi
一行命令实现(适合临时执行)
替换路径后直接在终端执行:
SOURCE="/path/to/source"; TARGET="/path/to/target"; compgen -G "$SOURCE/*.jar" >/dev/null || cp "$SOURCE"/*.war "$TARGET"; compgen -G "$SOURCE/*.war" >/dev/null || cp "$SOURCE"/*.jar "$TARGET"; compgen -G "$SOURCE/*.jar" >/dev/null && compgen -G "$SOURCE/*.war" >/dev/null && cp "$SOURCE"/*.jar "$SOURCE"/*.war "$TARGET"
关键说明
- 使用
compgen -G而非ls检查文件存在性:compgen只会匹配符合通配符的文件,避免了目录名带.jar/.war时的误判,结果更准确。 - 脚本中
$?是上一条命令的退出状态码:0表示存在匹配文件,1表示不存在。
内容的提问来源于stack exchange,提问作者User_01
相关产品推荐
相关产品推荐

