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