当我在 OSX 上输入 ls 时,如何仅列出源代码文件?

当我在 OSX 上输入 ls 时,如何仅列出源代码文件?

当我输入 ls 时,我不想看到 .o 文件,因为每次我 ls 时,它都会看到 X.cpp Xh Xo,我怎样才能不列出 .o 文件?

答案1

OS X 的 BSDls不支持-IGNU 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% 可靠。)

相关内容