如何在忽略硬链接的情况下获取文件夹大小?

Ben*_*ird 23 size hard-link disk-usage files

我使用 rsnapshot 进行备份,它会生成一系列包含同名文件的文件夹。一些文件是硬链接的,而其他文件是分开的。例如,hourly.1/file1andhourly.2/file1可能硬链接到同一个文件,而hourly.1/file2和hourly.2/file2是完全独立的文件。

我想找到hourly.2 忽略任何文件的文件夹使用的空间量,这些文件是hourly.1. 所以在上面的例子中,我想获得 file2 的大小,但忽略 file1。

我在 linux 上使用 bash,我想尽可能简单地从命令行执行此操作,因此请不要使用大型图形或其他操作系统解决方案。

Gil*_*il' 14

如果您特别想要存在于下hourly.2但不在下的文件的大小hourly.1,您可以使用du. 如果du多次处理同一个文件(即使名称不同,即硬链接),它只计算第一次文件。因此,du hourly.1 hourly.2报告的内容hourly.2是您正在寻找的尺寸。因此:

du -ks hourly.1 hourly.2 | sed -n '2s/[^0-9]*//p'
Run Code Online (Sandbox Code Playgroud)

(适用于任何 POSIX 系统和大多数其他 Unix 变体。假设目录名称hourly.1不包含任何换行符。)


tuk*_*k0z 13

正如@Gilles 所说,由于du只计算指向它遇到的同一个 inode 的所有硬链接中的第一个,因此您可以连续给它目录:

$ du -hc --max-depth=0 dirA dirB
29G /hourly.1
 1G /hourly.2
30G total
Run Code Online (Sandbox Code Playgroud)

即,'hourly.2' 中引用一个 inode(又名“真实”文件)的任何文件都不会被计算在内。

  • 根据 *du --help*,选项 *--max-depth=0* 等价于 *-s*,所以上面可以缩写为:`$ du -hcs dirA dirB` (3认同)

gre*_*eke 11

hourly.2只有一个链接的所有文件的总大小(以字节为单位):

$ find ./hourly.2 -type f -links 1 -printf "%s\n" | awk '{s=s+$1} END {print s}'
Run Code Online (Sandbox Code Playgroud)

从find手册页:

   -links n
          File has n links.
Run Code Online (Sandbox Code Playgroud)

要获得以千字节而不是字节为单位的总和,请使用 -printf "%k\n"

要列出具有不同链接数的文件,请使用find -links +1(多于一个链接)、find -links -5(少于五个链接)等等。

  • 如果某个文件在“hourly2”中的某个位置硬链接到某个文件,则您的命令将处理错误的答案。 (2认同)

小智 5

更简单

du -hc --max-depth=1 path/
Run Code Online (Sandbox Code Playgroud)

例子

9.4G    daily/users/rockspa/home/daily.21
3.6G    daily/users/rockspa/home/daily.30
4.2G    daily/users/rockspa/home/daily.11
1.1G    daily/users/rockspa/home/daily.4
4.2G    daily/users/rockspa/home/daily.9
3.0G    daily/users/rockspa/home/daily.25
3.5G    daily/users/rockspa/home/daily.20
4.2G    daily/users/rockspa/home/daily.13
913M    daily/users/rockspa/home/daily.5
2.8G    daily/users/rockspa/home/daily.26
1.4G    daily/users/rockspa/home/daily.1
2.6G    daily/users/rockspa/home/daily.28
4.2G    daily/users/rockspa/home/daily.15
3.8G    daily/users/rockspa/home/daily.19
327M    daily/users/rockspa/home/daily.8
4.2G    daily/users/rockspa/home/daily.17
3.1G    daily/users/rockspa/home/daily.23
...
Run Code Online (Sandbox Code Playgroud)