实际上字符串是 new.tar.gz 我想检查这个文件是否是 tar 包?
答案1
使用file
命令来检查它。
$ file new.tar.gz
new.tar.gz: gzip compressed data, last modified: Tue Sep 26 16:50:00 2017, from Unix
要检查压缩文件的内容,您必须将其解压缩,然后对其运行 file :
$ gunzip -k new.tar.gz; file new.tar
new.tar: POSIX tar archive (GNU)
答案2
从技术上讲,tar
存档文件可以称为任何事物。在 Unix 中,文件名并不决定文件的格式或内容。
但是,如果我们将问题限制为确定变量$filename
ether 中的文件名是否以字符串结尾.tar
或包含字符串.tar.
:
case $filename in
*.tar|*.tar.*) echo 'possibly a tar file' ;;
esac
上面允许.tar
在名称末尾或.tar
后跟另一个扩展名。
或者,在bash
(以上工作在任何sh
shell 中,包括bash
):
if [[ $filename =~ \.tar$ ]] ||
[[ $filename =~ \.tar\. ]]; then
echo 'possibly a tar file'
fi
或者,
if [[ $filename == *.tar ]] ||
[[ $filename == *.tar.* ]]; then
echo 'possibly a tar file'
fi
如果您的文件包含一长串文件名,那么以下内容将告诉您哪个文件名该文件中的行以字符串结尾.tar
或包含字符串.tar.
:
grep -E '\.tar$|\.tar\.' file.list
该-E
标志告诉grep
将给定模式视为扩展正则表达式(以处理|
)。
或者,
grep -e '\.tar$' -e '\.tar\.' file.list
列出最终的长列表中每个文件的扩展名(存储在file.list
):
sed 's/.*\.//' file.list
该sed
表达式s/.*\.//
将删除每行上的所有内容,直到最后一个点(包括最后一个点)。