У мене є кілька файлів з однаковим базовим файлом. Я хотів би видалити всі, крім одного
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би не відповідало жодному.