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。但不管怎么说,在我看来,就好像在命令它,我试图在变量来存储输出是出于某种原因没有被存储为一个字符串,导致这些问题,虽然我可能是错的。
把周围的FILEDATA变量的双引号:
如果[ “$ FILEDATA” == * “PNG图像” *]
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