Ls
列出不以特定前綴開頭的文件
我只需要列出目錄中不以
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