NPa*_*oli 3 unix command-line gzip tar
是否有任何 UNIX shell 命令可以扩展事先未知类型的压缩文件?
我应该能够使用此命令至少扩展以下任何类型的文件,但欢迎使用任何其他已知类型(如 .rar 或 .7z)的能力:
涉及单行命令的更简单的想法将是最好的解决方案,但任何意见表示赞赏。
编写这样的脚本并不难,但您需要小心一点。问题是zip文件就像压缩的 tar 文件,解压缩它们会提取文件。压缩并非所有文件gzip,bzip2或xz必然tar文件下(当然,一个.tar.bz2文件,所以是一个.tgz文件)。所以你必须定义你想用一个普通.gz文件做什么,以及你是否总是想要一个未解压的 tar 文件。
鉴于该序言,您可以编写如下脚本:
#!/bin/sh
# Optionally override the default commands
: ${GZIP:=gzip}
: ${TAR:=tar}
: ${BZIP2:=bzip2}
: ${XZ:=xz}
: ${UNZIP:=unzip}
for file in "$@"
do
case "$file" in
(*.tar.gz|*.tgz|*.tar)
$TAR -xf "$file";;
(*.tar.xz)
$XZ -cd "$file" | $TAR -xf -;;
(*.xz)
$XZ -d "$file";;
(*.gz)
$GZIP -d "$file";;
(*.tar.bz2)
$TAR -xf "$file";;
(*.bz2)
$BZIP2 -d "$file";;
(*.zip)
$UNZIP "$file";;
(*) echo "$0: unrecognized file type $file" >&2;;
esac
done
Run Code Online (Sandbox Code Playgroud)
那里没有太多的火箭科学。我假设您的版本会自动tar识别gzip和bzip2归档;如果没有,那么你需要像我所做的那样或多或少地做xz。还有一个--use-compress-program=XXXGNU 选项tar,但并非所有变体tar都能识别它。显然,您可以根据需要添加更多模式和(解)压缩器。识别 CPIO 和 shar 文件不会那么难。名单还在继续。
大多数人不会理会这样的脚本。例如,我通常在实际提取文件之前检查文件的内容。您可以向脚本添加参数处理以允许详细输出,或列表而不是提取(-tfor tar; -lfor unzip)和详细信息。
更难的一步是在无法识别后缀时识别文件类型。您可以运行file该文件并分析它所说的内容。另一种可能是分析文件的内容是否会放在子目录中;如果没有,您可以创建一个子目录,然后将内容提取到子目录中。机会很多。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |