此命令獲取所有文件和大小find . -type f | xargs -I x du -s x > /tmp/asd比這個 python 腳本慢 1000 倍import osfor dirpath, dirnames, filenames in os.walk("."): for f in filenames: print(f) fp = os.path.join(dirpath, f) if os.path.isfile(fp): print(os.path.getsize(fp))我在 bash 腳本中做錯了嗎?目錄結構大約有 500 萬個文件
2 回答

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
find可以直接-printf選擇在找到的文件上顯示一些數據:
%p File's name.
%s File's size in bytes.
%u File's user name, or numeric user ID if the user has no name.
%g File's group name, or numeric group ID if the group has no name.
...
因此,比出色的@Aaron 解決方案更進一步,您可以直接獲取所需的信息,而無需通過xargsnor啟動任何其他進程-exec:
find . -type f -printf '%p %s\n'

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
我建議使用以下內容:
find . -type f -exec stat --printf='%n %s\n' {} +
性能的主要提升來自避免為每個匹配的文件生成一個新進程find
。xargs
這可以用find
. 這是通過使用
(而不是)來完成的,這將產生盡可能少的進程(基于您的操作系統(tǒng)支持的最大參數數量)。find
-exec ... +
-exec ... \;
此外,我們使用更基本的stat
而不是du
查詢文件的大小,這更接近您在 python 腳本中所做的。
添加回答
舉報
0/150
提交
取消