我想从目录列表中排除符号链接。我一直在使用以下命令:
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
)
如果您想将输出作为ls
或dir
您应该使用:
#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
有了zsh
shell,你就可以使用它的全局限定符按 glob 扩展中的类型过滤文件。
dir -Fd -- *(^@)
将调用dir
当前目录中的非隐藏文件不是( ^
) 类型符号链接( @
) 作为参数。
如果你只需要查看列表,你甚至不需要调用dir
(或者它的 Unixyls
等价物),你可以将它们传递给zsh
的print
内置函数。
例如:
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 "@"