排除 ls 中的某些文件

Ali*_*yhl 90 bash ls

我想运行 ls 并在输出中排除某些文件。

当我运行以下命令时,我会在一行中获取所有文件:

$ ls -1
file1
file2
file3
temp
Run Code Online (Sandbox Code Playgroud)

我想以某种方式运行此命令,以便它显示

$ ls -1 <insert magic here> temp
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)

Sud*_*eer 123

ls -I <filename>
Run Code Online (Sandbox Code Playgroud)

-I = 忽略文件名,即不列出指定的文件。

要忽略多个文件,请在每个文件名前添加-I

ls -I file1 -I file2
Run Code Online (Sandbox Code Playgroud)

例如,要按文件扩展名忽略文件,请执行以下操作。

ls -I "*.jpg" -I "*.svg"
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用长格式选项`--ignore`,您可以将其扩展到全局模式,例如`ls --ignore="file?"` 或`ls --ignore="file*"` (5认同)
  • 您也可以通过引用模式来使用具有简短形式的 glob 模式 (3认同)

小智 22

对我来说,如果我使用 -I 一次,它会起作用,但如果我使用两次,它就不会。例如: ls -I *.csv作品。

ls -I *.csv -I *.txt不起作用并返回 txt 文件。

--ignore对我有用。这就是我需要和工作的。

ls -lhrt --ignore="*.gz" --ignore="*.1"

这将列出我排除旧备份日志的日志文件夹中的文件。

  • 以第一种形式引用 *.csv 有效,例如,`ls -I '*.txt'`。它不加引号不起作用的原因是因为外壳扩展,即您告诉外壳列出所有 csv 文件而不是排除它们。实际发生的是它在扩展后忽略了第一个 .csv 和 .1 文件,但列出了其余部分 (4认同)

小智 14

ls --ignore={"*.jpg","*.png","*.svg"}

  • 这只是使用 bash 的大括号扩展来获得三个 `--ignore` 选项。你也可以使用`--ignore="*."{jpg,png,svg}` (6认同)

小智 5

我认为这会产生您正在寻找的输出:

ls -1 !(temp)
Run Code Online (Sandbox Code Playgroud)

显然,你需要 让它shopt -s extglob工作
(我启用了它,所以我想在很久以前的某个时候我发现它很有用并启用了它)。

我想你也可以使用 grep 来过滤输出:

ls -1 | grep -v '^temp$'
Run Code Online (Sandbox Code Playgroud)

使用管道和过滤器提供了更多的灵活性,以及​​可转移到其他命令/情况的技能,尽管对于这种特定情况,您可能对此不感兴趣。