获取通过 find 输出检索的文件的确切大小

ald*_*c99 5 command-line bash find disk-usage busybox

我的 shell 引擎是Busybox 1.31.0bash 3.2

我需要获取从find命令中检索到的文件的大小。

我一直在尝试只查找 60 多天前修改过的文件,同时最好以 MB 表示法的单行形式获取所有这些文件的大小。这是我尝试过的。

find -type f -mtime +60 -print0 | xargs -0 du -smc
Run Code Online (Sandbox Code Playgroud)

find -type f -mtime +60 -exec du -smc {} \;
Run Code Online (Sandbox Code Playgroud)

前者逐行检索超过 60 天的所有文件(在此之前完全没有问题),但它奇怪地计算了所有这些行之间的大小数次,在最后一行我得到了一个不对应的“总”大小到输出的实际总大小。这是它的样子。

.....
.....
0       ./FOLDER 2018/Copy #183 of ~$DATABASE OTHERS - NOV.18N.xlsx
42      ./FOLDER 2018/F9C8A618.tmp
0       ./FOLDER 2018/Copy #166 of ~$DATABASE PORTFOLIO NOV.18.xlsx
3275    total
10      ./FOLDER 2018/CFDC6981.tmp
2       ./FOLDER 2018/D5AAF4EB.tmp
0       ./LIFE INSURANCE/Copy #15 of ~$Copy of LIFE INSURANCE CLIENTS.xlsx
12      total
Run Code Online (Sandbox Code Playgroud)

后者的输出逐行计算每个重合文件的大小,没有总数。

我期待的是:

    0       ./FOLDER 2018/Copy #183 of ~$DATABASE OTHERS - NOV.18N.xlsx
    42      ./FOLDER 2018/F9C8A618.tmp
    0       ./FOLDER 2018/Copy #166 of ~$DATABASE PORTFOLIO NOV.18.xlsx
    10      ./FOLDER 2018/CFDC6981.tmp
    2       ./FOLDER 2018/D5AAF4EB.tmp
    0       ./LIFE INSURANCE/Copy #15 of ~$Copy of LIFE INSURANCE CLIENTS.xlsx
    54      total
Run Code Online (Sandbox Code Playgroud)

或者只是没有所有线条的真实尺寸结果

54      total
Run Code Online (Sandbox Code Playgroud)

任何帮助都会受到欢迎。

sma*_*c89 5

find尝试通过管道传输to的输出du并指定--files0-from -标志:

find -type f -mtime +60 -print0 | du -shc --files0-from -
Run Code Online (Sandbox Code Playgroud)

最后应该会给你一个总计

要获得总数,请将输出通过管道传输到tail -n1

find -type f -mtime +60 -print0 | du -shc --files0-from - | tail -n1
Run Code Online (Sandbox Code Playgroud)

我应该提到的是,我实际上只是使用 gnu linux 测试了这个,而不是 busybox。查看busybox页面,看起来不du支持该--files0-from选项。

您可以将上面的命令更改为这样,以使其在 busybox 上运行:

find -type f -mtime +60 -print0 | xargs -0 du -ch | tail -n1
Run Code Online (Sandbox Code Playgroud)

上面的方法也适用于名称中包含空格和换行符的文件,但如果命令找到太多文件,则可能无法正常工作find。请参阅下面的评论。如果您觉得文件可能太多,您可以尝试此页面上的其他答案。