当我输入 ls 时,我不想看到 .o 文件,因为每次我 ls 时,它都会看到 X.cpp Xh Xo,我怎样才能不列出 .o 文件?
答案1
OS X 的 BSDls
不支持-I
GNU ls 中存在的过滤文件类型的参数。
您可以运行以下表达式,返回当前目录中所有没有.o
扩展名的文件,否则打印相同的格式ls -l
:
find * -maxdepth 0 ! -name '*.o' -print0 | xargs -0 ls -dl
您可以在您的程序中创建一个函数,~/.zprofile
以便通过键入以下内容来运行它lso <extension>
:
function lso {
find * -maxdepth 0 ! -name "*.$1" -print0 | xargs -0 ls -dl
}
它不适合作为完全的ls
替代品,因为它不支持参数。
示例输出:
$ ls -l
total 8
-rw-r--r-- 1 danielbeck staff 0 2 Sep 12:52 pi.c
-rw-r--r-- 1 danielbeck staff 0 2 Sep 12:52 pi.o
-rw-r--r-- 1 danielbeck staff 278 31 Aug 06:52 pi.py
-rw-r--r-- 1 danielbeck staff 0 2 Sep 12:52 pi.pyc
$ lso
-rw-r--r-- 1 danielbeck staff 0 2 Sep 12:52 pi.c
-rw-r--r-- 1 danielbeck staff 278 31 Aug 06:52 pi.py
-rw-r--r-- 1 danielbeck staff 0 2 Sep 12:52 pi.pyc
答案2
如果您已经setopt extended_glob
,您可以执行类似的操作ls -ld ^*.o
,并将其分配给您选择的别名。
答案3
@cYrus 的说法是正确的,BSDls -I ...
过滤器选项不受支持。但是这里有一个快速而粗略的黑客程序,可以对输出ls -F
进行后处理以排除目录、符号链接、套接字、whiteouts、FIFO:
ls -1F | grep -v '[/@=%|]'
(注意:显然这依赖于假设这些特殊字符不会出现在文件名中,这不像find
基于的方法那样 100% 可靠。)