Bash

獲取 find 輸出檢索到的文件的確切大小

  • September 27, 2019

我的 shell 引擎是Busybox 1.31.0bash 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

任何幫助都會受到好評。

嘗試通過管道輸出findtodu並指定--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。請參閱下面的評論。如果您覺得可能文件太多,您可以嘗試此頁面上的其他答案。

引用自:https://unix.stackexchange.com/questions/543676