ls目录的内容忽略符号链接

有意义的工程师

我有一个目录,我想在其中列出所有内容(文件和子目录),而不显示符号链接。我在Linux上使用GNU实用程序。ls版本是8.13。

例子:

完整目录清单:

~/test$ ls -Gg
total 12
drwxrwxr-x 2 4096 Jul  9 10:29 dir1
drwxrwxr-x 2 4096 Jul  9 10:29 dir2
drwxrwxr-x 2 4096 Jul  9 10:29 dir3
-rw-rw-r-- 1    0 Jul  9 10:29 file1
-rw-rw-r-- 1    0 Jul  9 10:29 file2
lrwxrwxrwx 1    5 Jul  9 10:29 link1 -> link1
lrwxrwxrwx 1    5 Jul  9 10:30 link2 -> link2

我想得到什么

~/test$ ls -somthing (or bash hack)
total 12
dir1 dir2 dir3 file1 file2

注意:我的主要动机是在不遵循符号链接的情况下进行递归grep(GNU grep 2.10)。

迈克尔·荷马

对于陈述的问题,您可以使用find

find . -mindepth 1 ! -type l

将列出当前目录或不是符号链接的任何子目录中的所有文件和目录。

mindepth 1只是跳过.当前目录条目。它的实质是的组合-type l,表示“是一个符号链接”,和的组合!则表示否定以下测试。组合起来,它们匹配不是符号链接的每个文件。这将递归列出所有文件和目录,但没有符号链接。

如果只需要常规文件(而不是目录):

find . -type f

要仅包括此目录的直接子级,而不要递归地包括所有其他子级,请执行以下操作:

find . -mindepth 1 -maxdepth 1

您可以将这些(和其他)测试结合在一起,以获得所需的文件列表。

grep在与您正在使用的测试相匹配的每个文件上执行特定操作,请使用-exec

find . -type f -exec grep -H 'some pattern' '{}' +

'{}'将这些文件被替换。+告知需要find你的命令完成。该选项-H强制grep显示文件名,即使该文件恰巧与单个匹配文件一起运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章