Глобы в Bash

Bash поддерживает больше глоб-паттернов, чем описано в man glob.7.

Если в настройках шелла включена опция extglob, то доступно ещё пять дополнительных паттернов.

Например, можно использовать отрицание. Я обнаружил, что это удобно в ситуациях, когда нужно применить команду ко всем файлам, кроме одного.

В моём случае я хотел переместить всё в поддиректорию, исключив саму эту поддиректорию. Сделал так:

$ mkdir old
$ mv !(old) old

Да, конечно, можно просто выполнить mv * old. mv выдаст ошибку про то, что не может переместить папку в саму себя, но остальные файлы всё равно обработает. Однако мне как-то некомфортно запускать такую команду, потому что я обычно не помню, как именно mv обрабатывает этот краевой случай.

А с отрицанием норм.