You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:55:23