如何在bash中找到归档文件的压缩方法
当调用我的脚本时,我需要在parametrs中找到归档文件的类型(compress方法),并根据compress方法使用tar和正确的选项 我发现file命令返回关于文件的信息,所以我可以从中获得第二列,并使用一些条件检查它是什么(我只需要支持tar-compressed by gzip或bzip2 not compressed and zip,但我不应该通过后缀检查,而是通过内容检查)如何在bash中找到归档文件的压缩方法,bash,shell,Bash,Shell,当调用我的脚本时,我需要在parametrs中找到归档文件的类型(compress方法),并根据compress方法使用tar和正确的选项 我发现file命令返回关于文件的信息,所以我可以从中获得第二列,并使用一些条件检查它是什么(我只需要支持tar-compressed by gzip或bzip2 not compressed and zip,但我不应该通过后缀检查,而是通过内容检查) 所以我想问,是否有更好的方法来获得压缩的归档方法,而不是通过文件和第二列。感谢最近版本的GNU tar自己解
所以我想问,是否有更好的方法来获得压缩的归档方法,而不是通过文件和第二列。感谢最近版本的GNU tar自己解决了这个问题,所以您不必这么做,例如tar-xvf myarchive.tar.gz就足够了 否则,请使用以下方法,例如:
function extract()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
GNUtar的最新版本自己就解决了这个问题,所以您不必这样做,例如tar-xvf myarchive.tar.gz就足够了 否则,请使用以下方法,例如:
function extract()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
您的最佳选择是要么像现在这样依赖
文件
,要么查找可能的幻数(文件类型标识符通常放在文件的开头)并自己计算出来
例如,ZIP文件以“PK”开头,BZip2文件以“BZ”开头。这些神奇的数字可能更长,但这正是我刚才看到的。你的最佳选择是要么像现在这样依赖于
文件,要么查找可能的神奇数字(文件类型标识符通常放在文件的开头)并自己计算出来
例如,ZIP文件以“PK”开头,BZip2文件以“BZ”开头。这些神奇的数字可能更长,但这正是我刚才看到的。我需要通过代码而不是tar来计算,所以我需要找到它。在您的示例中,您使用后缀,对吗?我不应该使用它,我必须使用那个档案中的内容。我需要通过代码而不是tar来计算,所以我需要找到它。在您的示例中,您使用后缀,对吗?我不应该使用它,我必须使用该存档中的内容。我不清楚你不喜欢文件
程序的输出是什么(也不清楚你在说什么…你应该使用标记作为关键字、命令名等)。我不清楚你不喜欢文件
程序的输出是什么(而且确实不清楚您在说什么……您应该使用标记来表示关键字、命令名等。)