Ls

列出不以特定前綴開頭的文件

  • October 26, 2018

我只需要列出目錄中不以qc_dl,qc_dt或開頭qd_df但也以.sas.

我可以列出不以“qc_dl”開頭的文件:

ls -I "qc_dl*" 

但是我不知道如何只從結果列表中選擇 SAS 程序。

此外,我可以選擇所有以“qc_dl”、“qc_dt”或“qd_df”開頭的 SAS 文件,如下所示:

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

但是,我不能將這兩個命令組合起來僅列出不以 . 開頭的 SAS 文件qc_dl/t/f

改用find

find /my/example/dir -type f -name '*.sas' ! -name 'qc_d[ltf]*'

來自 man bash:

如果使用內置 shopt 啟用了 extglob shell 選項,則可以辨識多個擴展模式匹配運算符。在下面的描述中,模式列表是一個或多個由 | 分隔的模式的列表。可以使用以下子圖案中的一種或多種來形成複合圖案:

         ?(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

引用自:https://unix.stackexchange.com/questions/173785