如何查找文件夹中的所有硬链接?

Jen*_*eno 4 encryption luks external-hdd hard-link

我有两个具有相同文件的外部磁盘。一个是加密的,另一个不是。加密的比非加密的空间少得多,我现在假设这是因为非加密磁盘上的硬链接。

所以我想检查一下,是否有任何硬链接文件可能会在加密磁盘上加倍。如何识别硬链接?

如果您有任何其他想法,可用空间问题的原因可能是什么,我愿意接受想法。由于加密,文件是否可能需要更多空间?

ilk*_*chu 16

$ find -type f -links +1
Run Code Online (Sandbox Code Playgroud)

这将显示所有具有多个链接(名称)的常规文件。它不会告诉您哪些名称链接到同一个文件,因为您可以使用-samefile-inum,例如find -samefile "$somefile"

从技术意义上讲,所有文件(文件名)都是(硬)链接,只是具有多个链接指向它们的文件在这种意义上很有趣。但即使在这些情况下,也无法说其中一个是“正确的”文件,另一个是链接,链接是平等的。

举个例子:

$ touch a b c
$ ln b b2 ; ln c c2
$ find -type f -links +1
./c2
./b
./b2
./c
$ find -samefile b
./b
./b2
Run Code Online (Sandbox Code Playgroud)


sud*_*dus 5

搜索硬链接

@ilkkachu 和 @barrycarter 的回答很好。这个答案是另一种选择,它用更多细节描述了一些结果。

  • 如果链接的 {match is/matches are} 在同一目录树中,您会直接找到它们。

  • 否则,您可以从挂载点搜索整个文件系统,但只能在同一文件系统中使用-xdev,这在搜索根分区/并且还有其他挂载分区时很重要。

    $ sudo find / -xdev -type f -links +1 -ls | sort -n > hard-links-in-root.txt
    
    Run Code Online (Sandbox Code Playgroud)

下面是一个例子,在当前目录中找到一个硬链接对,从/media/multimed-2数据分区的挂载点开始搜索在另一个目录中找到两个硬链接匹配。

$ sudo find . -xdev -type f -links +1 -ls | sort -n
  5242881    648 -rw-rw-r--   2 olle     nio        657936 jun 30  2015 ./like-this.png
  5242882    940 -rw-rw-r--   2 olle     nio        957688 jun 30  2015 ./from-here.png
 14843905   1620 -rw-r--r--   2 olle     nio       1652803 jun 30  2015 ./img_4810.jpg
 14843905   1620 -rw-r--r--   2 olle     nio       1652803 jun 30  2015 ./mid-sommer-night_4810.jpg

$ find /media/multimed-2/ -samefile ./like-this.png
/media/multimed-2/Photos/2015/06/30/like-this.png
/media/multimed-2/Bilder/kartor/like-this.png

$ find /media/multimed-2/ -samefile ./from-here.png
/media/multimed-2/Photos/2015/06/30/from-here.png
/media/multimed-2/Bilder/kartor/from-here.png
Run Code Online (Sandbox Code Playgroud)

使用不同驱动器空间的其他原因

  • 不同的文件系统(ext4、NTFS、FAT32 ...)

  • 不同的分区大小,导致开销(元数据)的差异。

  • 驱动器上的不同扇区大小(也许?)