如何检查文件是否是Bash shell中的tar文件?

我的问题是关于Bash,Shell。我正在编写脚本,但遇到以下问题:我遇到一种情况,当用户声明他或她将文件提取到目录中时。但是我必须测试是否存在,是否存在,需要检查该文件是否为* .tar文件。我搜索类似的东西,例如在检查文件是否可执行时:


if [ -x "file" ]; then

 echo "file is executable"

else

 echo "file is not executable"


# will this if test work?

case $1

"--extract")

 if [ -e $2 ] && [ tar -tzf $2 >/dev/null ]; then

  echo "file exists and is tar archive"

 else

  echo "file either does not exists or it is not .tar arcive"

 fi

;;

esac

上面的代码不起作用,它被完全忽略。有任何想法吗?


忽然笑
浏览 723回答 3
3回答

缥缈止盈

file命令可以确定文件类型:file my.tar如果是tar文件,则将输出:my.tar: POSIX tar archive (GNU)然后,您可以使用grep检查输出(是否包含tar archive):file my.tar | grep -q 'tar archive; && echo "I'm tar" || echo "I'm not tar"如果文件不存在,则文件输出为(退出代码为0):do-not-exist.txt: cannot open `do-not-exist.txt' (No such file or directory).您可以使用case语句来处理几种类型的文件。

梦里花落0921

我只是看tar是否可以列出文件:if ! { tar ztf "$file" || tar tf "$file"; } >/dev/null 2>&1; then    echo "$file is not a tar file"fi

LEATH

我通常会根据file命令使用类似这样的构造。压缩的tarball$ file somefile1.tar.gz | grep -q 'gzip compressed data' && echo yes || echo noyes$ file somefile2.tar.gz | grep -q 'gzip compressed data' && echo yes || echo nono压缩包上面处理gzip压缩的tarball文件,对于未压缩的更改出grep检测到的字符串:$ file somefile1.tar | grep -q 'POSIX tar archive' && echo yes || echo noyes$ file somefile2.tar | grep -q 'POSIX tar archive' && echo yes || echo nono
打开App,查看更多内容
随时随地看视频慕课网APP