grep не работает с именем файла из цикла for

Шрифт Consolas был разработан с намеками, которые плохо смотрятся в некоторых механизмах рендеринга.

enter image description here

Единственный способ обойти это — как-то изменить другой шрифт:

enter image description here

Если вашим приложениям специально требуется шрифт Consolas, единственный вариант — переименовать любой шрифт в Consolas, а затем использовать его.

0
03.11.2021, 20:52
2 ответа

Там, где написано в вашем сценарии:

  if grep -qF _AAC $file; then

он говорит: "Если содержимое файла с именем $fileсодержит литеральную строку _AAC, то...." выполнить содержимое блока then.

Если вместо этого вы имеете в виду поиск _AACв строке, полученной в результате расширения переменной $file(, т.е. чтобы проверить, присутствует ли _AAC в самом имени файла ), то в bash, нужно написать:

  if grep -qF _AAC <<< "$file"; then

Или, как указывает @roaima, литеральная строка, которую вы ищете, может быть включена в спецификацию файла с подстановочными знаками.

2
03.11.2021, 21:07

Если вы хотите сопоставить все файлы с именами, подобными .../something_AACxyz, с _AACв последней части имени файла, просто добавьте часть _AACнепосредственно к шаблону глобуса/шаблону:

for file in./**/*_AAC*.{txt,reamde,nfo}; do

Если вам нужны имена файлов, где _AACможет появляться в любой части, вы можете сделать (в Bash):

for file in./**/*.{txt,reamde,nfo}; do
    if [[ $file == *_AAC* ]]; then
         echo "'$file' contains _AAC"
    else
         echo "'$file' has NO _AAC"
    fi
done

Здесь вы также получаете файлы, которые соответствуют шаблонам, но не имеют _AAC.


В любом случае, в Bash вы также можете включить extglobи переписать шаблон с помощью @(...|...)вместо раскрытия фигурной скобки:

for file in./**/*_AAC*.@(txt|reamde|nfo); do

Раскрытие фигурных скобок создает несколько отдельных глобусов, в то время как с @(..)это всего лишь один глобус. (т. е. *.{foo,bar}совпадает с*.foo *.bar)При установке nullglobнесоответствующие -значения не имеют значения, но если у вас установлено failglob, будет только одна несоответствующая -единица. достаточно, чтобы провалить всю команду.

5
03.11.2021, 22:01

Теги

Похожие вопросы