説明したコマンドにMB、GB、またはTB単位の合計ファイルサイズとファイル数/合計を追加する方法
find . -maxdepth 1 -type d -print0 |
sort -z |
while IFS= read -r -d '' i; do
echo -n "$i: "
echo
(
find "$i" -type f |
sed -n 's/..*\.//p'|
sort |
uniq -c
)
echo
done
私が持っているもの:
.:
1 csv
2 docx
3 xlxs
./dir1:
1csv
./dir2:
1 docx
2 xlsx
./dir3/:
1 docx
1 xlsx
私は必要です:
.:
1MB 1 csv
2MB 2 docx
3GB 3 xlxs
total 3.3 GB and 6 files
./dir1:
1MB 1csv
total 1MB and 1 file
./dir2:
1MB 1 docx
2GB 2 xlsx
total 1.1 GB and 2 files
./dir3/:
1MB 1 docx
3GB 1 xlsx
total 3.1 GB and 2 files
または、このコマンドを実行するより良い方法がある場合は感謝します。ありがとうございます。
答え1
$ find . -maxdepth 1 -type d -print0 | sort -z | while IFS= read -r -d '' i ; do echo -n "$i: " ; echo ; list=$(find "$i" -type f | sed -n 's/..*\.//p'| sort | uniq -c); ; echo "Total $(du -sh $i | cut -f -1| tr -d '\n') and $(x=0; for i in $list; do y=$(cut -f -1 <<< $i); x=$(($x+$y)); done; echo $x) files"; done
この機能が実行しない唯一のことは、各ファイル形式のサイズの合計を見つけることです。これを行うには、次のecho $list
代わりに次の操作を行う必要があります。
for x in $list; ext=$(cut -d' ' -f2 << $x); do du -sch ${i}/*.${ext} | tail -n1 | cut -f -1; echo $x; done
拡張子を抽出するためのcutコマンドを取得することはできませんが、$list
ループとフォーマットを調整するだけの問題だと思います。$x