Files
dotfiles/bin/utzp
FlintyLemming 2c149026be add fish config
2025-12-19 16:44:59 +08:00

45 lines
1.4 KiB
Fish
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env fish
# 预检:检查是否安装了 pigz
set -l has_pigz (command -v pigz)
for file in $argv
if not test -f "$file"
echo "错误: $file 不是有效文件"
continue
end
# 1. 获取不带后缀的文件名
set -l base_name (string replace -r '\.(tar\..*|tgz|tbz2|txz)$' '' $file | string replace -r '\.[^.]+$' '' )
# 2. 判断解压程序
# 如果是 gzip 格式且系统有 pigz则使用 pigz 加速
set -l tar_opts "-xf"
if test -n "$has_pigz"
# 匹配 .tar.gz, .tgz, .gz 后缀
if string match -qr '\.(gz|tgz)$' "$file"
set tar_opts "-I pigz -xf"
echo "🚀 检测到 Gzip 格式,启用 pigz 并行加速"
end
end
# 3. 预检:获取压缩包根路径下的唯一项目数量
set -l root_items (tar $tar_opts "$file" -tf 2>/dev/null | string split -m 1 -f 1 / | sort -u)
set -l item_count (count $root_items)
if test $item_count -eq 0
echo "跳过: $file 无法读取内容或为空"
continue
end
# 4. 智能判断执行
if test $item_count -gt 1
echo "📦 检测到多个根项目 ($item_count),解压至目录: $base_name/"
mkdir -p "$base_name"
# 使用 -C 指定目标目录
tar $tar_opts "$file" -C "$base_name"
else
echo "📄 检测到单个根项目 ($root_items[1]),直接解压..."
tar $tar_opts "$file"
end
end