【问题标题】:How to find all files which are basically soft or hard links of other directories or files on linux?如何在linux上找到基本上是其他目录或文件的软链接或硬链接的所有文件?
【发布时间】:2009-11-27 19:31:58
【问题描述】:

如何获取系统上或某个目录中所有链接文件的列表。我曾经创建链接,但随着时间的推移它们变得无法管理。我想要目录中所有此类链接的列表。有人可以帮忙吗?

【问题讨论】:

  • 我认为这属于服务器故障
  • 不是服务器故障......这里没有任何服务器或网络相关......它是superuser.com

标签: linux shell find hardlink symlink


【解决方案1】:

查找符号链接很容易:

% find . -type l

查找硬链接很棘手,因为如果相关目录的子目录也有子目录,那么这些子目录会增加硬链接计数。这就是 UNIX 中子目录与其父目录的链接方式(每个子目录中的 .. 条目)。

如果您只想查找链接的文件(而不是目录),这将起作用:

% find . -type f \! -links 1

这是可行的,因为 确实 具有硬链接的文件的链接计数 > 1,而未链接文件的链接计数 == 1,因此此命令查找链接计数 1

或者,在较新版本的 find 上,您可以使用:

% find . -type f -links +1

这与上面的原因相同;但是,较新版本的 find 可以采用 +n 或 -n 而不仅仅是一个数字。这相当于分别测试大于 n 或小于 n。

【讨论】:

  • 呃...文件可以有
  • @naught101 好吧,提供 -1 确实无法找到任何文件。
【解决方案2】:
find / -xdev -samefile filename

【讨论】:

    【解决方案3】:

    @OP,如果你有 GNU find,你可以使用-printf "%n" 找到硬链接, 例如

    find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum
    do
     echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum"
     # if 2 or more files have the same inode number, then they are hard links. 
     # you can therefore count how many $inum that are the same and determine those hard links, which 
     # you have to try doing yourself.
    done
    

    【讨论】:

      【解决方案4】:

      参见例如这里 https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html 或将 Alnitak 和 amber_linux 答案组合成 find -L /where/to/search -samefile /some/link/to/file 查找到给定文件的所有硬链接和软链接。

      【讨论】:

      • 非常感谢!这正是我正在寻找的 - 如何找到哪些其他文件实际上与我正在查看的文件相同。
      猜你喜欢
      • 1970-01-01
      • 2012-03-31
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2011-03-13
      • 2021-08-17
      相关资源
      最近更新 更多