Files
dotfiles/bin/utzp
FlintyLemming 96c1693fd5 add fish config
2025-12-19 16:47:25 +08:00

49 lines
1.6 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. 确定解压工具参数 (只包含工具,不包含 -x 或 -t)
set -l tool_opt ""
if test -n "$has_pigz"; and string match -qr '\.(gz|tgz)$' "$file"
set tool_opt "-I pigz"
echo "🚀 检测到 Gzip使用 pigz 加速预览与解压"
end
# 3. 预检:预览内容并获取根项目
# 注意:这里只传 $tool_opt后面显式接 -tf
set -l tar_output (eval tar $tool_opt -tf "$file" 2>/dev/null)
if test $status -ne 0
echo "❌ 错误: 无法读取 $file,文件可能损坏或格式不支持"
continue
end
# 提取根目录项目:过滤掉 ./ 并在第一个 / 处截断
set -l root_items (echo $tar_output | string replace -r '^\./' '' | string split -f 1 / | sort -u | string collect -n)
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"
eval tar $tool_opt -xf "$file" -C "$base_name"
else
echo "📄 检测到单个根项目 ($root_items[1]),直接解压..."
eval tar $tool_opt -xf "$file"
end
end