Answers:
hourly.2
只有一个链接的所有文件的总大小(以字节为单位):
$ find ./hourly.2 -type f -links 1 -printf "%s\n" | awk '{s=s+$1} END {print s}'
从find
手册页:
-links n
File has n links.
要获得以千字节而不是字节为单位的总和,请使用 -printf "%k\n"
要列出具有不同链接数的文件,请依次使用find -links +1
(一个以上的链接),find -links -5
(少于五个的链接)等等。
hourly.2
。如果将它们复制到那里,它们将没有多余的链接,并且我的命令将起作用。如果它们是硬链接的,显然它将失败。我假设复制了新的备份文件。
如果您特别希望存在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'
(可在任何POSIX系统和大多数其他Unix变体上使用。假定目录名hourly.1
不包含任何换行符。)
令人敬畏的是,BusyBox的构建find
没有-printf
支持。这是对@grebneke答案的修改:
find . -type f -links 1 -exec ls -l {} \;| awk '{s=s+$5} END {print s}'
更简单
du -hc --max-depth=1 path/
例
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
...
hourly2
,则您的命令将处理错误的答案。