Я пытаюсь использовать rm -rf !(current) удалить все папки в текущем пути, кроме current папки. Но я получаю ниже ошибки

bash:!: событие не найдено

Как мне получить эту функциональность в Bash?

1 ответ1

3

Вам нужно включить 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .