我開始了幾週的 Linux bash 編程,但我遇到了一個問題:如何獲取多個目錄的大小(保存在 .txt 文件中的路徑),然後將目錄路徑寫入另一個文件中按大小和該目錄佔用的總大小。我已經嘗試過這個,但我不確定:
totsize=0
while read -r diretory; do
size=$(du -ch "$directory")
echo "$diretory size: $size" > "$homedir/$filename2"
$totsize += $(du -c "$homedir/$diretorio")
done < "$homedir/diretories.txt"
sudo echo "total size: $totsize" >> "$homedir/$filename2"
提前致謝(抱歉英文不好)
答案1
當按名稱處理文件或目錄時,我強烈建議用空字節字元分隔它們,而不是用換行符分隔。因為正式的檔名能包含換行符。因此,您不應該建立由換行符號分隔的目錄清單。
無論如何,當你有這個清單時,你可以使用這個:
du -sch --files0-from=dirs.txt
-s
就像-d0
並且只會總結每個參數的總數。-c
計算總計。-h
這一切都以人類可讀的格式進行。--files0-from=dirs.txt
從給定檔案中讀取以空位元組結尾的檔案名稱/目錄名稱。
有了你的列表,它應該看起來像(但有文件名中帶有換行符的陷阱):
tr '\n' '\0' <dirs.txt | du -sch --files0-from=-
答案2
find
結合使用du
並重定向到文件>
sudo find /path/to/topDir -maxdepth 1 -type d -exec du -sh {} \; > output.txt
例子:
xieerqi:$ sudo find Desktop -maxdepth 1 -type d -exec du -sh {} \; > outputFile1.txt
[sudo] password for xieerqi:
xieerqi:$ cat outputFile1.txt
2.7G Desktop
69M Desktop/linux-kernel-4.1.0
1.1M Desktop/DOCS
6.8M Desktop/The comments that became a reporter’s death sentence | New York Post_files
4.0K Desktop/newdir
6.7M Desktop/IMAGES
12M Desktop/TIRES
504K Desktop/MSU-TEMPLATES
341M Desktop/PDFS
19M Desktop/java
要讓此指令給出 list 中特定目錄的磁碟使用情況,您可以將 cat 和 xargs 與上面的命令結合。例如,
cat dirList.txt | xargs -I dir sudo find dir -maxdepth 0 -type d -exec du -sh {} \;
您不是其所有者的某些目錄需要sudo
訪問權限才能列出其磁碟使用情況,因此將其與sudo sh -c
.讓我示範一下,
xieerqi:$ sudo sh -c "cat dirList.txt | xargs -I dir find dir -maxdepth 0 -type d -exec du -sh {} \+"
[sudo] password for xieerqi:
2.7G /home/xieerqi/Desktop
11M /bin
5.5G /usr
xieerqi:$ cat dirList.txt
/home/xieerqi/Desktop
/bin
/usr
答案3
du
您可以使用以下命令取得目錄的大小:
du -h -d 1 "path to parent directory"
-d:子目錄的深度