排除ls中的某些文件


61

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

当我运行以下命令时,我将所有文件都放在一行中:

$ ls -1
file1
file2
file3
temp

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

$ ls -1 <insert magic here> temp
file1
file2
file3

Answers:


82
ls -I <filename>

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

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

ls -I file1 -I file2

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

ls -I "*.jpg" -I "*.svg"

4
如果您使用long-form选项--ignore,则可以将其扩展为glob模式,例如ls --ignore="file?"ls --ignore="file*"
steeldriver 2014年

3
您也可以通过引用模式使用短格式的全局模式
verboze 2015年

18

对我来说,如果我使用-I一次,它可以工作,但是如果我使用两次,则不能。例如: ls -I *.csv作品。

但是 ls -I *.csv -I *.txt不起作用,而是返回txt文件。

--ignore帮了我大忙。这就是我需要和工作的。

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

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


3
以第一种形式引用* .csv的作品,例如ls -I '*.txt'。无法将其取消引用的原因是因为shell扩展,即,您要告诉shell列出所有csv文件而不是排除它们。什么是实际发生的情况是,它忽略了第一.csv和扩张后0.1文件,但列出了余
verboze

双引号也对我有用。感谢@verboze
user38537

这比较容易。谢谢。
菲利普·德尔特伊

6

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


4
这只是使用bash的大括号扩展获取三个--ignore选项。您可能还使用过--ignore="*."{jpg,png,svg}
muru

1

我认为这会产生您想要的输出:

ls -1 !(temp)

显然,您需要 使它shopt -s extglob正常工作
(我启用了它,所以我想在遥远的过去我发现它有用并启用了它)。

我猜您也可以使用grep过滤输出:

ls -1 | grep -v '^temp$'

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.