я могу использовать логические операторы для удаления всех файлов, который соответствует одному и/или другому шаблону в одной строке?

[119729] Я взял vim-функцию, написанную Яном Ларресом, в вопросе " Как открыть или закрыть NERDTree и Tagbar с помощью \?". и изменил его (я только добавил команды wincmd), чтобы мой vim выглядел так:

функция! ToggleNERDTreeAndTagbar() let w:jumpbacktohere = 1

apt-get install manpages-dev

1
07.11.2014, 00:56
2 ответа

Просто:

rm *.txt *.csv

И если ваша оболочка поддерживает расширение браслета, вы можете:

rm *.{txt,csv}
2
27.01.2020, 23:20

Просто перечислите оба шаблона, если необходимо сопоставить файлы, которые соответствуют либо шаблону, т.е. файлы, которые соответствуют *.txt, либо файлам, которые соответствуют *.csv, или, другими словами, файлам, которые соответствуют *.txt или *.csv. (Вложенность квантификаторов и логических операторов имеет значение!)

rm *.txt *.csv

Обратите внимание, что если любой из паттернов не совпадает ни с одним файлом, то он останется нетронутым, поэтому rm будет жаловаться, что не может найти файл с именем *.txt или *.csv. Обычным способом избежать жалобы является использование rm -f, который беззвучно игнорирует несуществующие файлы.

rm -f *.txt *.csv

Нет оператора, который мог бы сопоставить строки, совпадающие как с шаблоном 1, так и с шаблоном 2. В этом случае все равно нет строки, которая бы соответствовала как *.txt, так и *.csv.

В ksh шаблон @(*.txt|*.csv) или *.@(txt|csv) совпадает со строками, которые совпадают либо с *.txt, либо с *.csv. Вы можете использовать этот паттерн в bash, если сначала запустите shopt -s extglob; вы можете использовать его в zsh, если сначала запустите setopt ksh_glob, или вы можете использовать родной синтаксис zsh *.(txt|csv). Обратите внимание, что если нет файла, совпадающего с составным шаблоном, то он будет передан команде как есть. В ATT ksh (и только в ATT ksh, а не в mksh, bash или zsh) можно использовать ~(N)*.@(txt|csv) для расширения до пустого списка, если ни один файл не соответствует шаблону. Вам все равно придется использовать rm -f, чтобы не жаловаться на отсутствие аргумента.

rm -f ~(N)*.@(txt|csv)

В bash, запустите shopt -s nullglob сначала, чтобы все шаблоны расширились до пустого списка, если они не совпадают ни с одним из них.

shopt -s nullglob extglob; rm -f *.@(txt|csv)

В zsh используйте классификатор глобуса N или сначала запустите setopt nullglob.

rm -f *.(txt|csv)(N)
setopt nullglob extglob; rm -f *.@(txt|csv)
2
27.01.2020, 23:20

Теги

Похожие вопросы