Список файлов, которые не начинаются с определенного префикса

Мне нужно перечислять только файлы в каталоге, которые НЕ начинаются с qc_dl , qc_dt или qd_df , но также и заканчиваются на .sas .

Я могу перечислить файлы, которые не начинаются с «qc_dl»:

  • zsh псевдоним переопределяется каким-то образом
  • Каково число в верхней части для результатов для ls -l?
  • Почему printf игнорирует IFS при печати результата моего сценария?
  • Какова команда поиска разрешений на чтение и запись для одного файла?
  • Что делает «-t» в команде mv? Пример ниже
  • Перечислите любой файл, заканчивающийся на .in и соответствующий .out с помощью сценария оболочки
  •  ls -I "qc_dl*" 

    Но тогда я не знаю, как выбрать только программы SAS из результирующего списка.

    Кроме того, я могу выбрать все файлы SAS, начинающиеся с «qc_dl», «qc_dt» или «qd_df», следующим образом:

     ls qc_d{l,t,f}*.sas 

    Однако я не могу объединить две команды, чтобы отображать только SAS-файлы, которые НЕ начинаются с qc_dl/t/f .

  • Когда был открыт последний файл?
  • список файлов в каталоге без перечисления в текущем каталоге
  • BASH: как Grep и отображает набор значений
  • Установите ls-списки на основе регулярных выражений вместо globbing
  • Что такое «порядок каталогов» файлов в каталоге (используется `ls -U`)?
  • Как найти индекс inode любого каталога?
  • 3 Solutions collect form web for “Список файлов, которые не начинаются с определенного префикса”

    Предполагая, что имена файлов не содержат символов новой строки и не начинаются с . , это должно работать:

     ls -d -- *.sas | grep -v '^qc_d[ltf]' 

    Список файлов, заканчивающихся на .sas, и фильтрации всего, что не является qc_dl, qc_dt, qc_df

    Для любых нужд фильтрации grep – ваш друг.

    От человека bash:

    Если опция оболочки extglob включена с использованием встроенного магазина, то распознаются несколько расширенных операторов сопоставления шаблонов. В следующем описании список шаблонов представляет собой список из одного или нескольких шаблонов, разделенных символом |. Композитные шаблоны могут быть сформированы с использованием одного или нескольких из следующих подматриц:

      ?(pattern-list) Matches zero or one occurrence of the given patterns *(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches one of the given patterns !(pattern-list) Matches anything except one of the given patterns 

    Затем вы можете использовать более мощное сопоставление образцов, когда оно включено.

    Включить это:

     ~$ shopt -s extglob 

    Затем вы можете перечислить файлы, которые заканчиваются на .sas и не начинаться с qc_d :

     ~$ ls a.sas a.txt b.sas b.txt c.sas c.txt qc_dc.sas qc_df.sas qc_dl.sas qc_dt.sas ~$ ls !(qc_d*).sas a.sas b.sas c.sas 

    Чтобы отключить его:

     ~$ shopt -u extglob 

    Вместо этого используйте find ?

     find /my/example/dir -type f -name '*.sas' ! -name 'qc_d[ltf]*' 
    Linux и Unix - лучшая ОС в мире.