Я пытаюсь использовать 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