菜鸟科技网

jar命令如何删除文件或包?

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

jar命令如何删除文件或包?-图1
(图片来源网络,侵删)
  1. 推荐方法:使用 jar -uf 更新并覆盖,这是最常用、最直接的方法。
  2. 高级方法:使用 jar -uf0 创建新包,这种方法更高效,适合删除大量文件。

使用 jar -uf 更新并覆盖 (最常用)

这种方法的核心思想是:创建一个新的临时 JAR 文件,只包含你想要保留的文件,然后用它覆盖掉旧的 JAR 文件。

命令格式:

jar -uf [目标jar文件] -C [临时目录] .

详细步骤:

假设我们有一个名为 myapp.jar 的 JAR 文件,我们想从其中删除 old_config.properties 文件。

jar命令如何删除文件或包?-图2
(图片来源网络,侵删)

第 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 步:删除目标文件

jar命令如何删除文件或包?-图3
(图片来源网络,侵删)

进入临时目录,并使用系统命令(如 rmdel)删除你不需要的文件。

# 进入临时目录
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 包,只包含你需要的文件。

步骤:

  1. 解压:同方法一,解压 JAR 包到临时目录。
  2. 删除:同方法一,在临时目录中删除不需要的文件。
  3. 创建新包:使用 jar -cf 命令创建一个全新的 JAR 包。
  4. 替换:用新创建的 JAR 包替换掉旧的。
  5. 清理:删除临时目录。

命令示例:

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) 是最佳选择,它简单、直接且有效。

分享:
扫描分享到社交APP
上一篇
下一篇