Попробуйте так:
find . -type f -exec file '{}' \; | grep -i 'elf 32'
Не нужно изощряться в цитировании сценария. Просто убедитесь, что вы указали расширение$1
(и любую другую переменную):
#!/bin/bash
exif=$( file "$1" )
printf '%s\n' "$exif"
или просто
#!/bin/bash
file "$1"
Для запуска:
./script.sh Pics\ 1/img.jpg
или,
./script.sh "Pics 1/img.jpg"
или,
./script.sh "Pics 1"/img.jpg
Что происходит в вашем сценарии, так это то, что вы делаете \
часть имени пути. Это не часть имени пути, это просто экранирование пробела в командной строке.
Кроме того, вы назначаете строку eval
переменной среды EXIF
на время выполнения команды file
. Вы наверное имели ввиду EXIF=$( eval "$CMD" )
, но это не нужно (см. выше ).
Если вы действительно хотите сохранить полную file
команду в переменной, вам следует использовать массив:
#!/bin/bash
cmd=( file "$1" )
exif=$( "${cmd[@]}" )
printf '%s\n' "$exif"
Опять же, здесь нет необходимости в eval
.
... даже если мы напишем это для /bin/sh
(, у которого нет массивов, но есть список позиционных параметров, также доступных в bash
, очевидно):
#!/bin/sh
set -- file "$1"
exif=$( "$@" )
printf '%s\n' "$exif"