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

Мне нужно перечислять только файлы в каталоге, которые НЕ начинаются с 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 .

  • Удаление пустых каталогов командой 'ls'
  • Как удалить каталог ': q!'?
  • получать размер файла и количество строк одновременно
  • Как я могу перечислить каждый файл в каталоге, кроме тех, у которых указаны указанные расширения?
  • последний файл времени открыт
  • Почему эти две команды find дают разные результаты?
  • Tmux затмил расцветку вывода ls
  • сортировать данные ls пользователями
  • 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 - лучшая ОС в мире.