本文目录导读:

这是为您编写的选择文件压缩级别脚本,支持多种压缩工具和自定义输出路径。
#!/bin/bash
# 文件名: compress_selector.sh
# 用途: 交互式选择文件并指定压缩级别,支持 gzip、bzip2、xz、zip
# ------------------------ 配置区域 ------------------------
DEFAULT_COMPRESSOR="gzip"
DEFAULT_LEVEL="" # 留空表示使用工具默认级别
# ---------------------------------------------------------
# 显示压缩级别说明
show_level_info() {
echo "================================================"
echo " 压缩级别选择帮助"
echo "================================================"
echo "支持的压缩工具与级别范围:"
echo " gzip : 1-9 (1=最快, 6=默认, 9=最佳压缩)"
echo " bzip2 : 1-9 (1=最快, 9=最佳压缩)"
echo " xz : 0-9 (0=无压缩, 6=默认, 9=最佳)"
echo " zip : 0-9 (0=仅存储, 6=默认, 9=最佳)"
echo "-----------------------------------------------"
echo "输入 'q' 或 'quit' 可随时退出"
echo "================================================"
}
# 选择压缩工具
select_compressor() {
echo ""
echo "请选择压缩工具:"
echo " 1) gzip (通用, 速度快)"
echo " 2) bzip2 (压缩率较高, 较慢)"
echo " 3) xz (高压缩率, 很慢)"
echo " 4) zip (兼容性好, 可打包目录)"
read -p "输入编号 (1-4, 默认: 1): " comp_choice
case "${comp_choice:-1}" in
1) COMPRESSOR="gzip" ;;
2) COMPRESSOR="bzip2" ;;
3) COMPRESSOR="xz" ;;
4) COMPRESSOR="zip" ;;
*) echo "无效选择,使用默认 gzip"; COMPRESSOR="gzip" ;;
esac
echo "→ 已选择: $COMPRESSOR"
}
# 输入压缩级别并验证
input_level() {
local min=1 max=9
[[ "$COMPRESSOR" == "xz" ]] && min=0
while true; do
read -p "请输入压缩级别 ($min-$max, 留空=默认): " level
level="${level:-$DEFAULT_LEVEL}"
if [[ -z "$level" ]]; then
echo "→ 使用工具默认级别"
LEVEL=""
break
fi
if [[ "$level" == "q" || "$level" == "quit" ]]; then
echo "退出程序。"
exit 0
fi
# 验证是否为数字且在范围内
if [[ "$level" =~ ^[0-9]+$ ]] && (( level >= min && level <= max )); then
LEVEL="$level"
echo "→ 已选择级别: $LEVEL"
break
else
echo "错误: 请输入 $min-$9 之间的整数。"
fi
done
}
# 选择文件(支持多文件/目录)
select_files() {
echo ""
echo "请输入要压缩的文件或目录 (支持通配符,如 *.txt)"
echo "多项用空格分隔,直接回车可选择当前目录下所有文件"
read -p "输入: " -r file_input
if [[ -z "$file_input" ]]; then
# 默认: 当前目录下所有非隐藏文件
FILES=(*)
if [[ ${#FILES[@]} -eq 0 ]]; then
echo "错误: 当前目录没有可压缩的文件。"
exit 1
fi
echo "→ 已选择所有文件: ${FILES[*]}"
else
# 展开通配符并检查存在性
shopt -s nullglob
FILES=($file_input)
shopt -u nullglob
if [[ ${#FILES[@]} -eq 0 ]]; then
echo "错误: 未找到匹配的文件 '$file_input'"
exit 1
fi
echo "→ 选择了 ${#FILES[@]} 个项目"
fi
}
# 选择输出目录
select_output_dir() {
echo ""
read -p "请输入输出目录 (留空=当前目录): " out_dir
out_dir="${out_dir:-.}"
if [[ ! -d "$out_dir" ]]; then
read -p "目录 '$out_dir' 不存在,是否创建? (y/n): " create
if [[ "$create" == "y" ]]; then
mkdir -p "$out_dir" || { echo "创建失败"; exit 1; }
echo "→ 已创建目录: $out_dir"
else
echo "使用当前目录"
out_dir="."
fi
fi
}
# 执行压缩(根据工具和级别)
do_compress() {
local cmd=""
local ext=""
echo ""
echo "开始压缩..."
echo "================================================"
for item in "${FILES[@]}"; do
if [[ ! -e "$item" ]]; then
echo "跳过不存在的项目: $item"
continue
fi
# 构建输出路径
local base_name=$(basename "$item")
local output_path="$out_dir/$base_name"
case "$COMPRESSOR" in
gzip)
[[ -n "$LEVEL" ]] && cmd="gzip -$LEVEL -c \"$item\" > \"$output_path.gz\"" || cmd="gzip -c \"$item\" > \"$output_path.gz\""
ext=".gz"
;;
bzip2)
[[ -n "$LEVEL" ]] && cmd="bzip2 -$LEVEL -c \"$item\" > \"$output_path.bz2\"" || cmd="bzip2 -c \"$item\" > \"$output_path.bz2\""
ext=".bz2"
;;
xz)
[[ -n "$LEVEL" ]] && cmd="xz -$LEVEL -c \"$item\" > \"$output_path.xz\"" || cmd="xz -c \"$item\" > \"$output_path.xz\""
ext=".xz"
;;
zip)
# zip 处理稍有不同,支持多个文件合并到一个压缩包
if [[ ${#FILES[@]} -eq 1 ]]; then
[[ -n "$LEVEL" ]] && cmd="zip -$LEVEL \"$output_path.zip\" \"$item\"" || cmd="zip \"$output_path.zip\" \"$item\""
else
# 多文件/目录:全部打进同一个 zip
local zipname="${out_dir}/multi_files_$(date +%Y%m%d_%H%M%S).zip"
local filelist=""
for f in "${FILES[@]}"; do
filelist="$filelist \"$f\""
done
[[ -n "$LEVEL" ]] && cmd="zip -$LEVEL \"$zipname\" $filelist" || cmd="zip \"$zipname\" $filelist"
ext=".zip"
fi
;;
esac
echo "执行: $cmd"
eval "$cmd"
if [[ $? -eq 0 ]]; then
echo "✓ 成功压缩: $item → ${output_path}${ext}"
else
echo "✗ 压缩失败: $item"
fi
echo "-----------------------------------------------"
done
# zip 且多文件,输出 final 信息
if [[ "$COMPRESSOR" == "zip" && ${#FILES[@]} -gt 1 ]]; then
echo "所有文件已打包到: $zipname"
fi
}
# ----------------------------- 主流程 -----------------------------
echo "===== 文件压缩级别选择脚本 ====="
show_level_info
while true; do
select_compressor
input_level
select_files
select_output_dir
# 确认信息
echo ""
echo "========== 压缩配置摘要 =========="
echo "压缩工具 : $COMPRESSOR"
echo "压缩级别 : ${LEVEL:-默认}"
echo "文件列表 : ${FILES[*]}"
echo "输出目录 : $out_dir"
echo "================================="
read -p "确认执行? (y/n, 默认 y): " confirm
confirm="${confirm:-y}"
if [[ "$confirm" == "y" ]]; then
do_compress
echo "压缩完成!"
break
else
echo "重新选择..."
fi
done
使用说明
- 保存脚本:将以上内容保存为
compress_selector.sh。 - 赋予执行权限:
chmod +x compress_selector.sh
- 运行脚本:
./compress_selector.sh
功能特点
- 交互式选择:逐步引导您选择压缩工具、压缩级别、文件和输出目录。
- 多种压缩工具:支持
gzip、bzip2、xz和zip,可根据需求选择。 - 灵活的文件选择:支持通配符(如
*.log)和多个文件/目录。 - 级别验证:自动检查输入的压缩级别是否在有效范围内。
- 默认值:所有选项都有合理的默认值,直接回车即可使用。
- 安全性:执行前会显示摘要确认,避免误操作。
- 输出目录:可指定输出目录,若不存在会询问是否创建。
示例
===== 文件压缩级别选择脚本 =====
================================================
压缩级别选择帮助
================================================
...
请选择压缩工具:
1) gzip
2) bzip2
3) xz
4) zip
输入编号 (1-4, 默认: 1): 3
→ 已选择: xz
请输入压缩级别 (0-9, 留空=默认): 9
→ 已选择级别: 9
请输入要压缩的文件或目录 (支持通配符,如 *.txt)
输入: document.pdf image.png
→ 选择了 2 个项目
请输入输出目录 (留空=当前目录): ./compressed
目录 './compressed' 不存在,是否创建? (y/n): y
→ 已创建目录: ./compressed
========== 压缩配置摘要 ==========
...
确认执行? (y/n, 默认 y): y
开始压缩...
✓ 成功压缩: document.pdf → ./compressed/document.pdf.xz
✓ 成功压缩: image.png → ./compressed/image.png.xz
压缩完成!
这个脚本非常适合日常文件压缩需求,让您可以精细控制每项压缩参数,如有特殊需求(如加密、分卷等),可以在此基础上扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播