У меня есть несколько файлов с одним и тем же базовым именем файла. Я хотел бы удалить все, кроме одного
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Если бы мне не нужно было держать один, я знаю, что мог бы использовать rm foo.*
.
TLDP демонстрирует ^
отрицание соответствия. Методом проб и ошибок я смог найти
rm foo.*[^org]
делает то, что мне нужно, но я не совсем понимаю синтаксис.
Кроме того, хотя это не ограничение в моем случае использования, я думаю, что этот шаблон также игнорирует foo.o
и foo.or
. Как работает этот шаблон, и как будет выглядеть только игнорируемый foo.org
глобус?
Regular Expression
. Вы должны быть осторожны с вашими группировками персонажей. Используя скобки, вы указали класс символов, что означает, что вы будете удалять любые файлы, которые имеют расширение с буквами o
, r
или g
в любом порядке. Используйте скобки, чтобы создать группу и сохранить порядок символов.
foo.*[^org]
будет соответствовать любому имени файла, которое начинается с foo.
одного или нескольких символов после точки, где последний символ не является o, r или g. Так что будет соответствовать foo.orb
, но не foo.org
или foo.or
или foo.o
. Ответ GlennJackman показывает, как включить расширенные функции сопоставления с образцом, чтобы отменить совпадение.
rm foo.*[^org]
удаляются все файлы, последний символ которых не является ни однимo
,r
илиg
, таким образом,foo.foo
тоже не будет совпадать.