ald*_*c99 5 command-line bash find disk-usage busybox
我的 shell 引擎是Busybox 1.31.0或bash 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)
任何帮助都会受到欢迎。
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
。请参阅下面的评论。如果您觉得文件可能太多,您可以尝试此页面上的其他答案。
归档时间: |
|
查看次数: |
2002 次 |
最近记录: |