История изменений
Исправление Zmicier, (текущая версия) :
Нужно проверить, содержит ли путь к определенным файлам определенные значения (напр. doc). Вывод команды file содержит строки, разделенные двоеточием и состоящие из: полный путь к файлу; описание файла. В цикле, с помощью awk выводим в переменную только путь к файлу.
Нахрена тут awk
?
Что вы вообще делаете? Скармливаете список файлов утилите file(1)
, чтоб не вызывать ее многократно, я так понимаю? В целом разумно, однако:
Во-первых, в выводе file(1)
по-умолчанию имя файла и описание разделены не двоеточием, а двоеточием и некоторым количеством пробелов для выравнивания в две колонки, откуда уже стоит заключить, что этот вывод, строго говоря, для чтения человеком, а не машиной. И двоеточие с пробелами — это же не просто вполне допустимая, но и довольно частая последовательность знаков для имени файла. Так что такой вывод разбору не подлежит.
Выравнивание по колонкам отключить почему-то нельзя, но можно поменять разделитель, возьмем хотя бы табуляцию (тоже, разумеется, допустимую в именах, но это уже экзотика):
#!/bin/bash
while IFS=$'\t' read file type; do
read type <<< "$type"
if [[ $file == *.txt ]]; then
...
fi
done < \
<(file --separator $'\t' *)
read type <<< "$type"
— это обрезка (trim) пробелов, тех самых, что нельзя убрать.
Исходная версия Zmicier, :
Нужно проверить, содержит ли путь к определенным файлам определенные значения (напр. doc). Вывод команды file содержит строки, разделенные двоеточием и состоящие из: полный путь к файлу; описание файла. В цикле, с помощью awk выводим в переменную только путь к файлу.
Нахрена тут awk
?
Что вы вообще делаете? Скармливаете список файлов утилите file(1)
, чтоб не вызывать ее многократно, я так понимаю? В целом разумно, однако:
Во-первых, в выводе file(1)
по-умолчанию имя файла и описание разделены не двоеточием, а двоеточием и некоторым количеством пробелов для выравнивания в две колонки, откуда уже стоит заключить этот вывод он, строго говоря, для чтения человеком, а не машиной. И двоеточие с пробелами — это не просто вполне допустимая, но и довольно частая последовательность знаков для имени файла. Так что такой вывод разбору не подлежит.
Выравнивание по колонкам отключить почему-то нельзя, но хотя бы можно поменять разделитель, возьмем хотя бы табуляцию (тоже, разумеется, допустимую в именах, но это уже экзотика):
#!/bin/bash
while IFS=$'\t' read file type; do
read type <<< "$type"
if [[ $file == *.txt ]]; then
...
fi
done < \
<(file --separator $'\t' *)
read type <<< "$type"
— это обрезка (trim) пробелов, тех самых, что нельзя убрать.