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

时间:2019-02-04 04:59:51

标签: image shell

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

但是当我运行“ file bef0e2e9181980f0d6d23e6c057a47d2”时,我得到了

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

为了简而言之,我的最终目标是制作一个脚本来帮助我识别图像文件类型,因为我有许多没有扩展名的图像。我最终将用操作替换if和elifs下的echo命令,以使用正确的扩展名重命名文件。但是无论如何,在我看来,由于某种原因,我试图存储在变量中的命令输出似乎并没有作为导致这些问题的字符串存储,尽管我可能是错的。

2 个答案:

答案 0 :(得分:0)

在您的fileData变量周围加上双引号:

如果[[“ $ fileData” == *“ PNG图片” *]

答案 1 :(得分:0)

chunksize = 10**6
filename = 'clean data.csv'
store = pd.HDFStore('store.h5')

for chunk in pd.read_csv(filename, chunksize=chunksize):
    pivoted = df.pivot(index = 'column1', columns = 'column2', values = 'column3').fillna(0)
    #megalist.append(chunk)
    store.append('df', pivoted, format = 't', append=True, data_columns=True)

我使用bash而不是sh运行此版本。有用。这是功能齐全的脚本,可以满足任何人的需要(将经过适当标记的文件转储到名为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