Ошибка сценария оболочки Linux, вызванная использованием вывода команды file в Linux для анализа изображений? - PullRequest
0 голосов
/ 04 февраля 2019
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 bef0e2e9181980f0d6d23e6c057a47"get

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

Короче говоря, моя конечная цель заключается в создании сценария, который помог бы мне определять типы файлов изображений, потому что у меня много изображений без расширений.В конце концов я заменю команды echo в if и elifs действиями, чтобы переименовать файлы с правильными расширениями.Но в любом случае мне кажется, что вывод команды, которую я пытаюсь сохранить в переменной, по какой-то причине не сохраняется как строка, вызывающая эти проблемы, хотя я могу ошибаться.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019
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
0 голосов
/ 04 февраля 2019

Поместите двойные кавычки вокруг переменных fileData:

if ["$ fileData" == * "PNG image" *]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...