由于使用file命令的输出在Linux中分析图像的Linux shell脚本错误?

问题描述 投票:1回答:2
echo "enter filename"

read filename

fileData=$(file $filename)

if [ $fileData == *"PNG image"* ]
then
echo "this is a PNG file"

elif [ $fileData == *"JPEG image"* ]
then
echo "this is a JPEG file"

elif [ $fileData == *"GIF image"* ]
then
echo "this is a GIF file"

else
echo "error"

fi

所以,我无法弄清楚什么是错的正是这一点,但它返回与bef0e2e9181980f0d6d23e6c057a47d2作为文件名以下的输出:

0.sh: 7: [: bef0e2e9181980f0d6d23e6c057a47d2:: unexpected operator
0.sh: 11: [: bef0e2e9181980f0d6d23e6c057a47d2:: unexpected operator
0.sh: 15: [: bef0e2e9181980f0d6d23e6c057a47d2:: unexpected operator
error

但是当我运行“文件bef0e2e9181980f0d6d23e6c057a47d2”我得到

bef0e2e9181980f0d6d23e6c057a47d2: JPEG image data, JFIF standard 1.01, resolution (DPCM), density 37x37, segment length 16, baseline, precision 8, 1365x767, frames 3

因此,为了使长话短说,我在这里的最终目标是让一个脚本来帮我鉴定图像的文件类型,因为我有没有扩展名的许多图像。我最终会用行动来重命名与正确的扩展名的文件替换,如果下回声命令和elifs。但不管怎么说,在我看来,就好像在命令它,我试图在变量来存储输出是出于某种原因没有被存储为一个字符串,导致这些问题,虽然我可能是错的。

image shell
2个回答
0
投票

把周围的FILEDATA变量的双引号:

如果[ “$ FILEDATA” == * “PNG图像” *]


0
投票
echo "enter filename"

read filename

fileData=$(file "$filename")

if [[ "$fileData" == *"PNG image"* ]]
then
echo "this is a PNG file"

elif [[ "$fileData" == *"JPEG image"* ]]
then
echo "this is a JPEG file"

elif [[ "$fileData" == *"GIF image"* ]]
then
echo "this is a GIF file"

else
echo "error"

fi

我跑这个版本使用bash,而不是SH。有用。而这里的,做一切,如果有人想它(转储正确标注文件到一个名为0的文件夹)我想要的功能齐全的脚本:

for filename in *
do

fileData=$(file "$filename")

if [[ "$fileData" == *"PNG image"* ]]
then
mv "$filename" "0/$filename .png"

elif [[ "$fileData" == *"JPEG image"* ]]
then
mv "$filename" "0/$filename .jpg"

elif [[ "$fileData" == *"GIF image"* ]]
then
mv "$filename" "0/$filename .gif"

else
echo "error"

fi

done
© www.soinside.com 2019 - 2024. All rights reserved.