我只需要列出目录中不以qc_dl
, qc_dt
or开头qd_df
但也以.sas
.
我可以列出不以“qc_dl”开头的文件:
ls -I "qc_dl*"
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何只从结果列表中选择 SAS 程序。
此外,我可以选择所有以“qc_dl”、“qc_dt”或“qd_df”开头的 SAS 文件,如下所示:
ls qc_d{l,t,f}*.sas
Run Code Online (Sandbox Code Playgroud)
但是,我不能将这两个命令结合起来仅列出不以 .csv 开头的 SAS 文件qc_dl/t/f
。
Jos*_*lly 13
使用find
呢?
find /my/example/dir -type f -name '*.sas' ! -name 'qc_d[ltf]*'
Run Code Online (Sandbox Code Playgroud)
fre*_*ini 10
从人bash:
如果使用 shopt 内置程序启用了 extglob shell 选项,则可以识别多个扩展模式匹配运算符。在以下描述中,模式列表是由 | 分隔的一个或多个模式的列表。复合图案可以使用以下一种或多种子图案形成:
Run Code Online (Sandbox Code Playgroud)?(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
Run Code Online (Sandbox Code Playgroud)
然后您可以列出以 结尾.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
Run Code Online (Sandbox Code Playgroud)
要关闭它:
~$ shopt -u extglob
Run Code Online (Sandbox Code Playgroud)
假设文件名不包含换行符并且不以 开头.
,这应该有效:
ls -d -- *.sas | grep -v '^qc_d[ltf]'
Run Code Online (Sandbox Code Playgroud)
列出以 .sas 结尾的文件并过滤所有不是 qc_dl、qc_dt、qc_df 的文件
对于任何过滤需求,grep 是您的朋友。
归档时间: |
|
查看次数: |
19457 次 |
最近记录: |