Я пытаюсь использовать rm -rf !(current)
удалить все папки в текущем пути, кроме current
папки.
Но я получаю ниже ошибки
bash:!: событие не найдено
Как мне получить эту функциональность в Bash?
Вам нужно включить extglob
.
Предположим, что у нас есть три каталога:
$ ls -d */
current/ future/ past/
Без расширенного глобуса следующее не понято:
$ echo !(current)
bash: syntax error near unexpected token `('
Если мы extglob
, то это понятно:
$ shopt -s extglob
$ echo !(current)
future past
Это успешно соответствует всем файлам, кроме current
.
Обратите внимание, что восклицательный знак !
, bash-активный персонаж. Он может вызвать расширение истории, которое, в случае неудачи, приводит к появившейся ошибке. Если вы не используете расширение истории, вы можете отключить его: set +H