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

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

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

 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 типа
  • Что означает точка после бит разрешения файла?
  • Как я могу перечислить LS_COLORS в цвете?
  • Есть ли опция с командой ls, которую я вижу только в каталогах?
  • Почему bash дает мне (видимо) противоречивую информацию о файле?
  • Почему ls -l показывает время и год для каждого файла?
  • ls command - список файлов, содержащих определенную строку в имени файла и принадлежащих к определенному типу
  • ls & dircolors - различать символическую ссылку на каталог и символическую ссылку на обычный файл
  • 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 - лучшая ОС в мире.