列出不以特定前缀开头的文件

Sya*_*yan 5 ls wildcards

我只需要列出目录中不以qc_dl, qc_dtor开头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 选项,则可以识别多个扩展模式匹配运算符。在以下描述中,模式列表是由 | 分隔的一个或多个模式的列表。复合图案可以使用以下一种或多种子图案形成:

         ?(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
Run Code Online (Sandbox Code Playgroud)

启用此功能后,您可以使用更强大的模式匹配。

打开它:

~$ 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)


jcb*_*rmu 6

假设文件名不包含换行符并且不以 开头.,这应该有效:

ls -d -- *.sas | grep -v '^qc_d[ltf]'
Run Code Online (Sandbox Code Playgroud)

列出以 .sas 结尾的文件并过滤所有不是 qc_dl、qc_dt、qc_df 的文件

对于任何过滤需求,grep 是您的朋友。