Bash 腳本 - 如何取得 .txt 檔案中目錄的大小並將其儲存到其他檔案?

Bash 腳本 - 如何取得 .txt 檔案中目錄的大小並將其儲存到其他檔案?

我開始了幾週的 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:子目錄的深度

相關內容