【问题标题】:Using linux find command to find directories and symbolic links to directories使用 linux find 命令查找目录和目录的符号链接
【发布时间】:2013-12-14 03:27:48
【问题描述】:

对于linux中给定的目录树,我要列出:

  • 所有目录,
  • 目录的所有符号链接
  • 不是通过符号链接找到的目录。

考虑一个空目录,然后执行

mkdir a
mkdir a/b
ln -s a c
echo "x" > f1
ln -s f1 f2

然后find . -type d给了

.
./a
./a/b

所以错过了./c 的符号链接,而find . -type l 给出了

./c
./f2

它错过了目录../a./a/b,此外还打印符号链接./f2,它不是指向目录的符号链接,而是指向文件的符号链接。

【问题讨论】:

    标签: linux bash shell command find


    【解决方案1】:

    使用-H 选项:

    导致为命令行上指定的每个符号链接返回的文件信息和文件类型(参见 stat(2))是 链接引用的文件,而不是链接本身。如果引用的文件不存在,则文件信息和类型将用于链接本身。所有不在命令行的符号链接的文件信息是 链接本身。

    所以:

    find -H . -type d
    

    将列出目录和目录链接。

    【讨论】:

    • 嗯,看起来是版本相关的。我引用的那个文档来自 OS X 中的 BSD 版本。但是 Linux 中的 GNU 发现是不同的。
    • GNU find 有-L,但它也通过指向目录的链接使其递归。
    • 必须在 find 后立即指定才能工作:find -L . -type d.
    • 我不小心对帖子投了反对票。请为此道歉!有人可以回复我的投票吗?
    • 谢谢,但系统说我的投票被锁定,直到帖子被编辑:(
    【解决方案2】:

    你可以说:

    while read -r name; do
      [ -d "$name" ] && echo "$name";
    done < <(find .)
    

    【讨论】:

    • @HåkonHægland 请参阅上面的编辑。似乎仅find 不足以达到预期的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2014-01-01
    相关资源
    最近更新 更多