exglob отрицание не работает как ожидалось

Я пытался использовать отрицание, чтобы исключить каталоги из globbing, но каталоги все еще отображаются в соответствии с шаблоном:

bash-4.3$ ls file_1.txt testdir bash-4.3$ shopt extglob extglob on bash-4.3$ echo !(*/) file_1.txt testdir bash-4.3$ 

Что я делаю неправильно?

Примечание. Я знаю, что я могу использовать for цикла с помощью команды [ или find , но я пытаюсь выяснить, что extglob .

  • Может ли дерево команд UNIX отображать только каталоги, соответствующие шаблону?
  • Схват первых символов для строки из трубы
  • как `echo` 'отформатировал' man-страницу некоторой команды в текстовый файл
  • Как удалить все вхождения .DS_Store в папку
  • Как я могу увидеть весь файл, а также дождаться добавления большего количества данных в этот файл?
  • Неверная команда zip испортила мою директорию проекта
  • Перенос прав доступа от root к постоянному пользователю
  • Не вредно ли закрывать окно терминала без надлежащего выхода из приложения?
  • One Solution collect form web for “exglob отрицание не работает как ожидалось”

    Вы не можете иметь / в @(...) !(...) , *(...)

    Параметр / может появляться только между глобами, даже a[x/y]b рассматривается как @(a\[x)/@(y\]b) . globs сначала разбиваются на / а каждая часть сопоставляется с содержимым каталога. Однако, если существуют расширения x(...) ksh glob, внутри / которые находятся внутри (...) , нет разделения, но каждая часть glob по-прежнему сопоставляется с именами файлов. In !(*/*) , */* Сопоставляется с каждым именем файла в текущем каталоге. Очевидно, что ни одно имя файла не может содержать / , поэтому оно ничего не соответствует, поэтому !(*/*) Соответствует каждому файлу.

    Здесь вы хотите использовать zsh и его квалификаторы glob:

     echo *(^/) 

    Для файлов любого типа, кроме каталога. Или быть противоположным bash */ (который является любым файлом каталога типов после разрешения symlink ):

     echo *(-^/) 

    (файлы, которые не являются ни каталогами, ни символическими ссылками на каталоги).

    Linux и Unix - лучшая ОС в мире.