Bash
獲取 find 輸出檢索到的文件的確切大小
我的 shell 引擎是Busybox 1.31.0或bash 3.2
我需要獲取從find命令檢索到的文件的大小。
我一直在嘗試僅查找已在 60 多天前修改過的文件,同時獲取所有這些文件的大小,最好以單行 MB 表示法進行匯總。這是我嘗試過的。
find -type f -mtime +60 -print0 | xargs -0 du -smc
和
find -type f -mtime +60 -exec du -smc {} \;
前者逐行檢索所有超過 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
後者的輸出逐行計算每個重合文件的大小,沒有總數。
我期待的是:
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
或者只是沒有所有線條的實際尺寸結果
54 total
任何幫助都會受到好評。
嘗試通過管道輸出
find
todu
並指定--files0-from -
標誌:find -type f -mtime +60 -print0 | du -shc --files0-from -
這應該在最後給你一個總計
要獲得總數,請將輸出通過管道傳輸到
tail -n1
:find -type f -mtime +60 -print0 | du -shc --files0-from - | tail -n1
我應該提一下,我實際上只是用 gnu linux 測試了這個,而不是 busybox。查看busybox頁面,它看起來並不
du
支持該--files0-from
選項。你可以把上面的命令改成這個,讓它在busybox上工作:
find -type f -mtime +60 -print0 | xargs -0 du -ch | tail -n1
以上也適用於名稱中包含空格和換行符的文件,但如果命令找到的文件過多,則可能無法正常工作
find
。請參閱下面的評論。如果您覺得可能文件太多,您可以嘗試此頁面上的其他答案。