Ответ 1
Вы можете использовать find для этого:
$ find . -name '*.txt' -a ! -name '*Thomas.txt'
Я пытаюсь исключить определенную строку из поиска файла.
Предположим, у меня есть список файлов: file_Michael.txt, file_Thomas.txt, file_Anne.txt.
Я хочу быть в состоянии и написать что-то вроде
ls *<and not Thomas>.txt
чтобы предоставить файл file_Michael.txt и file_Anne.txt, но не файл_Thomas.txt.
Обратное легко:
ls *Thomas.txt
Выполнение этого с одним символом также легко:
ls *[^s].txt
Но как это сделать со строкой?
Себастьян
Вы можете использовать find для этого:
$ find . -name '*.txt' -a ! -name '*Thomas.txt'
с bash
shopt -s extglob
ls !(*Thomas).txt
некоторые другие способы
find . -type f \( -iname "*.txt" -a -not -iname "*thomas*" \)
ls *txt |grep -vi "thomas"
Если вы зацикливаете подстановочный знак, просто пропустите оставшуюся часть итерации, если есть что-то, что вы хотите исключить.
for file in *.txt; do
case $file in *Thomas*) continue;; esac
: ... do stuff with "$file"
done