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
指定されたファイルから、null バイトで終了するファイル名/ディレクトリ名を読み取ります。
リストは次のようになります (ただし、ファイル名に改行が含まれるという落とし穴があります)。
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
このコマンドでリスト内の特定のディレクトリのディスク使用量を表示するには、上記のコマンドに 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:サブディレクトリの深さ