jar 命令本身没有像 rm 或 del 那样的直接删除文件的子命令,删除 JAR 包中的文件主要有两种方法:

- 推荐方法:使用
jar -uf更新并覆盖,这是最常用、最直接的方法。 - 高级方法:使用
jar -uf0创建新包,这种方法更高效,适合删除大量文件。
使用 jar -uf 更新并覆盖 (最常用)
这种方法的核心思想是:创建一个新的临时 JAR 文件,只包含你想要保留的文件,然后用它覆盖掉旧的 JAR 文件。
命令格式:
jar -uf [目标jar文件] -C [临时目录] .
详细步骤:
假设我们有一个名为 myapp.jar 的 JAR 文件,我们想从其中删除 old_config.properties 文件。

第 1 步:解压 JAR 文件
你需要将 JAR 文件解压到一个临时目录中。
# 创建一个临时目录 mkdir temp_jar_contents # 将 myapp.jar 的内容解压到 temp_jar_contents 目录中 jar -xvf myapp.jar -C temp_jar_contents .
执行后,temp_jar_contents 目录下会包含 myapp.jar 的所有文件和文件夹结构。
第 2 步:删除目标文件

进入临时目录,并使用系统命令(如 rm 或 del)删除你不需要的文件。
# 进入临时目录 cd temp_jar_contents # 删除目标文件 rm old_config.properties # 如果要删除整个目录,例如删除 'unused' 目录 # rm -rf unused
第 3 步:重新打包 JAR 文件
使用 jar -uf 命令将修改后的目录内容重新打包回原始的 JAR 文件中。-u 表示 "update"(更新),-f 指定目标文件。
# 回到上一级目录 cd .. # 将 temp_jar_contents 目录下的所有内容更新到 myapp.jar 中 jar -uf myapp.jar -C temp_jar_contents .
第 4 步:清理临时文件
删除不再需要的临时目录。
# 删除临时目录及其所有内容 rm -rf temp_jar_contents
完整示例脚本:
#!/bin/bash JAR_FILE="myapp.jar" FILE_TO_DELETE="old_config.properties" TEMP_DIR="temp_jar_contents" # 1. 创建临时目录并解压 mkdir -p $TEMP_DIR jar -xvf $JAR_FILE -C $TEMP_DIR . # 2. 删除文件 echo "正在删除 $FILE_TO_DELETE ..." rm $TEMP_DIR/$FILE_TO_DELETE # 3. 重新打包 echo "正在重新打包 $JAR_FILE ..." jar -uf $JAR_FILE -C $TEMP_DIR . # 4. 清理 echo "正在清理临时文件..." rm -rf $TEMP_DIR echo "操作完成!"
使用 jar -uf0 创建新包 (更高效)
这种方法与方法一类似,但它在创建新 JAR 包时使用了 -0 (零) 选项,表示 不压缩,这对于处理大量文件时可以显著提高速度,因为压缩和解压缩是耗时操作,完成操作后,你可以选择用 jar -0c 命令重新生成一个压缩版本。
命令格式:
# 1. 解压 (同上) jar -xvf myapp.jar -C temp_jar_contents . # 2. 删除文件 (同上) cd temp_jar_contents rm old_config.properties cd .. # 3. 重新打包 (不压缩) jar -uf0 myapp.jar -C temp_jar_contents . # 4. (可选) 重新生成压缩版 # 先备份原文件 mv myapp.jar myapp_uncompressed.jar # 创建新的压缩版 jar -cf myapp.jar -C temp_jar_contents . # 删除未压缩版 rm myapp_uncompressed.jar # 5. 清理 (同上) rm -rf temp_jar_contents
直接创建一个全新的 JAR 包 (最彻底)
如果你想从 JAR 包中删除大量文件,或者想完全重新组织内容,最可靠的方法是创建一个全新的、干净的 JAR 包,只包含你需要的文件。
步骤:
- 解压:同方法一,解压 JAR 包到临时目录。
- 删除:同方法一,在临时目录中删除不需要的文件。
- 创建新包:使用
jar -cf命令创建一个全新的 JAR 包。 - 替换:用新创建的 JAR 包替换掉旧的。
- 清理:删除临时目录。
命令示例:
JAR_FILE="myapp.jar"
NEW_JAR_FILE="myapp_new.jar"
TEMP_DIR="temp_jar_contents"
# 1. 解压
mkdir -p $TEMP_DIR
jar -xvf $JAR_FILE -C $TEMP_DIR .
# 2. 删除文件
cd $TEMP_DIR
rm old_config.properties unwanted_folder/
cd ..
# 3. 创建一个全新的、干净的 JAR 包
jar -cf $NEW_JAR_FILE -C $TEMP_DIR .
# 4. 替换原文件 (可选,建议先备份)
# mv $JAR_FILE ${JAR_FILE}.bak
# mv $NEW_JAR_FILE $JAR_FILE
# 5. 清理
rm -rf $TEMP_DIR
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
jar -uf 更新 |
最直接,最常用,无需额外创建文件。 | 每次更新都会重新压缩整个 JAR 包,如果文件多可能稍慢。 | 删除少量文件,快速修复。 |
jar -uf0 更新 |
速度快,因为不压缩。 | 生成一个未压缩的 JAR 包,体积较大,需要额外步骤压缩。 | 需要删除大量文件,对性能要求高。 |
| 创建新包 | 最干净、最可靠,可以完全重组内容。 | 步骤最多,需要创建一个临时的新文件。 | 需要大规模重构或删除大量文件时。 |
对于绝大多数日常操作,方法一 (jar -uf) 是最佳选择,它简单、直接且有效。
