为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2021-04-07 21:18:57
我的问题是关于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上面的代码不起作用,它被完全忽略。有任何想法吗?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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语句来处理几种类型的文件。


查看完整回答
反对 回复 2021-04-16
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我只是看tar是否可以列出文件:


if ! { tar ztf "$file" || tar tf "$file"; } >/dev/null 2>&1; then

    echo "$file is not a tar file"

fi


查看完整回答
反对 回复 2021-04-16
?
LEATH

TA贡献1936条经验 获得超6个赞

我通常会根据file命令使用类似这样的构造。


压缩的tarball

$ file somefile1.tar.gz | grep -q 'gzip compressed data' && echo yes || echo no

yes


$ file somefile2.tar.gz | grep -q 'gzip compressed data' && echo yes || echo no

no

压缩包

上面处理gzip压缩的tarball文件,对于未压缩的更改出grep检测到的字符串:


$ file somefile1.tar | grep -q 'POSIX tar archive' && echo yes || echo no

yes


$ file somefile2.tar | grep -q 'POSIX tar archive' && echo yes || echo no

no


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 721 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信