проверьте, является ли файл файлом Unix, и установите бит, если это правда - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу создать файл оболочки, который определяет, является ли файл типом Unix или Dos. Используя запрос IF, я хочу решить, проверив, нужно ли конвертировать файл с помощью "dos2unix" или нет. Я знаю команду «ФАЙЛ», но возвращаемое значение не является типом данных BOOLEAN, а является строкой.

Так есть ли способ установить бит BOOLEAN в значение true, если файл имеет тип файла unix?

спасибо заранее ...!

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы можете проанализировать вывод команды file. Для текстовых файлов с окончанием строки \ n выводится ASCII text ..., а для текстовых файлов с окончанием строки \ r \ n выводится ASCII text ... with CRLF line terminators. Обратите внимание, что в зависимости от фактического содержимого файла вместо «...» может содержаться дополнительная информация. Следовательно, вы можете сделать что-то вроде

file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))

Переменная is_dos_text_file содержит значение 1, если YOURFILE оценивался по файлу как текстовый файл с окончаниями CRLF. Это 0, если YOURFILE либо имеет окончания строки Unix, либо не был определен как текстовый файл.

ОБНОВЛЕНИЕ: Я только что заметил, что вы использовали тег shell в своем сообщении и, следовательно, искали решение для Posix Shell. В этом случае конструкция ((...)) не может быть использована, и вам придется сделать что-то вроде

if file YOURFILE | grep -q '^ASCII text.*with CRLF'
then
  is_dos_text_file=1 # true
else
  is_dos_text_file=0 # false
fi

чтобы получить тот же эффект.

0 голосов
/ 30 апреля 2019

Вы можете преобразовать файл в файл Unix и проверить, не изменился ли он.В этом случае это файл Unix.В противном случае это файл DOS.

echo unix > unix-file
echo dos | unix2dos > dos-file

for file in {dos,unix}-file; do
  if cmp -s $file <(dos2unix < $file); then
    echo $file is a unix file
  else
    echo $file is a dos file
  fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...