#bash #glob
#bash #глоб
Вопрос:
Я пытаюсь написать команду, которая удаляет все файлы / папки, начинающиеся с «test», исключая zip-файлы, которые также начинаются с test.
Пока у меня есть:
rm -rf test*[!zip]
Это почти работает, но не совсем.
Если у меня есть следующие файлы:
test
test1
test.zip
Затем после выполнения оставшейся команды:
test
test.zip
Итак, проблема в том, что тест также должен быть удален. Я понимаю, что моя команда соответствует только тем вещам, которые имеют хотя бы один дополнительный символ, кроме «test», но не уверен, как это исправить.
Комментарии:
1. Обратите внимание, что в вашем случае
[!zip]
не является фиксированным шаблоном, говорящим excludezip
, он говорит excludez
,i
илиp
. Для исключения шаблонов используйтеextglob
подход, указанный в ответе анубхавы
Ответ №1:
Для вашего шаблона test*[!zip]
глобуса потребуется хотя бы один символ после test
из-за наличия [!zip]
части.
Вы можете использовать этот расширенный шаблон глобуса в bash
:
shopt -s extglob nullglob
printf '%sn' test!(*zip)
Или же вы можете использовать это find
:
find . -maxdepth 1 -mindepth 1 -type f -name 'test*' -not -name 'test*zip'