从目录中排除符号链接

从目录中排除符号链接

我想从目录列表中排除符号链接。我一直在使用以下命令:

dir --ignore=@ -F

但符号链接仍然如图所示列出。

https://i.stack.imgur.com/kWxi4.png

使用 dir 命令时如何排除它们?

谢谢。

答案1

您可以使用find排除符号链接:

find -maxdepth 1 ! -type l ! -path './.*' -ls

! -type l排除了符号链接。因此将显示目录、常规文件、特殊文件等。
! -path './.*'排除了隐藏文件(例如.bashrc.profile

如果您想将输出作为lsdir您应该使用:

#With color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls --color=yes -Fd {} +

#No color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls -Fd {} +

答案2

有了zshshell,你就可以使用它的全局限定符按 glob 扩展中的类型过滤文件。

dir -Fd -- *(^@)

将调用dir当前目录中的非隐藏文件不是( ^) 类型符号链接( @) 作为参数。

如果你只需要查看列表,你甚至不需要调用dir(或者它的 Unixyls等价物),你可以将它们传递给zshprint内置函数。

例如:

print -rC1 -- *(^@)

print他们会对专栏r感到1 C惊讶吗?

使用ark 限定符会在类型文件的末尾M添加一个/目录就像dir -F那样,尽管这只适用于目录

print -rC1 -- *(M^@)

答案3

--ignore不适用于类型,它适用于模式。例如,如果您有文件:

$ ls 
a.txt b.dat c.txt d.dat
$ ls --ignore='*.txt'
b.dat d.dat

没有简单的方法来过滤符号链接,但您可以尝试使用grep

ls -F | grep -v "@"

相关内容