У меня есть несколько файлов с одним и тем же базовым именем файла. Я хотел бы удалить все, кроме одного
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
глобус?
rm foo.*[^org]
удаляются все файлы, последний символ которых не является ни однимo
,r
илиg
, таким образом,foo.foo
тоже не будет совпадать.Regular Expression
. Вы должны быть осторожны с вашими группировками персонажей. Используя скобки, вы указали класс символов, что означает, что вы будете удалять любые файлы, которые имеют расширение с буквамиo
,r
илиg
в любом порядке. Используйте скобки, чтобы создать группу и сохранить порядок символов.foo.*[^org]
будет соответствовать любому имени файла, которое начинается сfoo.
одного или нескольких символов после точки, где последний символ не является o, r или g. Так что будет соответствоватьfoo.orb
, но неfoo.org
илиfoo.or
илиfoo.o
. Ответ GlennJackman показывает, как включить расширенные функции сопоставления с образцом, чтобы отменить совпадение.Ответы:
Это "фу". с последующим ничего не "орг"
ссылка: https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
источник
@()
для списка шаблонов: stackoverflow.com/a/217208/3779853В Bash вы также можете использовать
GLOBIGNORE="*.org"; rm -i foo*
.И
unset GLOBIGNORE
когда это будет сделано.Это на самом деле не лучше
shopt -s extglob
, но мне легче запомнить.источник
( GLOBIGNORE="*.org"; rm -i foo* )
GLOBIGNORE="*foo*:*bar*"
А трубу можно сделать?
(очевидно, вы можете заменить echo на rm в последней цепочке).
источник
ls -1
должно быть более надежным, чтобы все файлы обрабатывалисьgrep
отдельноОП был очень близок:
хотя в этом случае нет
*
необходимости.источник
foo.ort
иfoo.erg