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

使用finddu并重定向到文件>

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

要让此命令显示列表中特定目录的磁盘使用情况,您可以将 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:子目录的深度

相关内容