Определите и добавьте расширение файла к файлам, используя bash - PullRequest
0 голосов
/ 18 октября 2018

У меня есть папка с несколькими объектами.Эти объекты не имеют расширения в имени файла.

Я хочу использовать file, чтобы получить mimetype, а затем переименовать объект в object.mimetype.

. На данный момент это то, чтоЯ сохранил как test.sh:

#!/bin/bash
for i in *;
do "EXT"==$(file "$i" --mime-type -b | sed 's#.*/##') 
combination= "$i.$EXT"
mv "$i" "$combination"

done

Когда я запускаю test.sh в каталоге, я получаю вывод вроде:

test.sh: line 3: EXT==tiff: command not found
test.sh: line 4: CCITT_1.: command not found
mv: cannot move 'CCITT_1' to '': No such file or directory
test.sh: line 3: EXT==jpeg: command not found
test.sh: line 4: image.: command not found
mv: cannot move 'image' to '': No such file or directory
test.sh: line 3: EXT==pdf: command not found
test.sh: line 4: Job-Description.pdf.: command not found
mv: cannot move 'Job-Description.pdf' to '': No such file or directory

, поэтому я знаю, что команда file ... работаетпотому что я проверял это, но я оступился на всем остальном.Куда я иду не так?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Кажется, ваша главная проблема в том, как вы назначаете переменные.Когда вы присваиваете значение переменной:

  • Имя переменной не должно заключаться в кавычки - противоположный случай использования $ для расширения параметра переменной
  • Должно быть толькоодин знак равенства (второй знак равенства будет рассматриваться как часть строкового значения)
  • Не должно быть пробелов по обе стороны от знака равенства;в противном случае имя переменной будет интерпретировано как имя команды.

Следующие действия должны выполнять то, что вы намерены:

for i in *;
    do ext=$(file "$i" --mime-type -b | sed 's#.*/##')
    mv -v "$i" "$i.$ext"
done

Примечание: этот код делает те же предположения, что и ваш оригиналкод, то есть, что все файлы в текущем каталоге (включая любые нестандартные файлы, такие как каталоги) должны быть переименованы - и что они будут переименованы в соответствии с их типом MIME, поэтому у простых текстовых файлов будет суффикс .plain.

0 голосов
/ 18 октября 2018

Возможно, вы захотите присвоить вывод $(...) для $EXT, для этого вы должны использовать = вместо ==, и вы не должны заключать в кавычки имя переменной.С некоторыми другими модификациями:

#!/bin/bash
for i in *; do
    ext=$(file "$i" --mime-type -b | sed 's#.*/##')
    mv "$i" "$i.$ext"
done
...