first commit
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 自动解压函数
|
||||
auto_extract() {
|
||||
local file="$1"
|
||||
local target_dir="${file%.*}" # 解压到与压缩包同名的目录
|
||||
|
||||
# 检查文件是否存在
|
||||
if [[ ! -f "$file" ]]; then
|
||||
echo "错误: 文件 '$file' 不存在"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 创建目标目录
|
||||
mkdir -p "$target_dir" || {
|
||||
echo "错误: 无法创建目录 '$target_dir'"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 根据文件后缀选择解压方式
|
||||
case "$file" in
|
||||
*.7z|*.7Z)
|
||||
if command -v 7z &>/dev/null; then
|
||||
7z x "$file" -o"$target_dir" -y >/dev/null
|
||||
elif command -v 7za &>/dev/null; then
|
||||
7za x "$file" -o"$target_dir" -y >/dev/null
|
||||
else
|
||||
echo "错误: 需要安装p7zip工具(7z或7za命令)"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
*.zip|*.ZIP)
|
||||
if command -v unzip &>/dev/null; then
|
||||
unzip -q -o "$file" -d "$target_dir"
|
||||
else
|
||||
echo "错误: 需要安装unzip工具"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
*.rar|*.RAR)
|
||||
if command -v unrar &>/dev/null; then
|
||||
unrar x -y "$file" "$target_dir" >/dev/null
|
||||
elif command -v rar &>/dev/null; then
|
||||
rar x -y "$file" "$target_dir" >/dev/null
|
||||
else
|
||||
echo "错误: 需要安装unrar或rar工具"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
*.tar.gz|*.tgz)
|
||||
tar -xzf "$file" -C "$target_dir" --overwrite
|
||||
;;
|
||||
*.tar.bz2)
|
||||
tar -xjf "$file" -C "$target_dir" --overwrite
|
||||
;;
|
||||
*.tar.xz)
|
||||
tar -xJf "$file" -C "$target_dir" --overwrite
|
||||
;;
|
||||
*)
|
||||
echo "错误: 不支持的压缩格式 '$file'"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo "解压成功: $file → $target_dir"
|
||||
else
|
||||
echo "解压失败: $file"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 批量解压当前目录下所有支持的压缩文件
|
||||
batch_extract() {
|
||||
local formats=("*.7z" "*.zip" "*.rar" "*.tar.gz" "*.tgz" "*.tar.bz2" "*.tar.xz")
|
||||
local extracted=0
|
||||
|
||||
for format in "${formats[@]}"; do
|
||||
for file in $format; do
|
||||
[[ -f "$file" ]] || continue
|
||||
auto_extract "$file" && ((extracted++))
|
||||
done
|
||||
done
|
||||
|
||||
if (( extracted == 0 )); then
|
||||
echo "未找到可解压的文件"
|
||||
fi
|
||||
}
|
||||
|
||||
# 使用示例:
|
||||
# 解压单个文件: auto_extract "archive.7z"
|
||||
# 解压当前目录所有文件: batch_extract
|
||||
|
||||
export -f auto_extract
|
||||
Reference in New Issue
Block a user