xargsで出力を探すパイピング時の問題の引用[重複]

xargsで出力を探すパイピング時の問題の引用[重複]

次のサブディレクトリを含むディレクトリがあります。つまり、$ tree -L 1

.
├── 2007-06-20_to_2008-10-01
├── 2008-07-21_to_2008_08_12-Nokia 2mp
├── 2009-11-01_to_2011-01-10 - All iphone Pics
├── 2011-01-01 palliser-pics
├── 2011-03-10_to_2011-04-12-few iphone pics b4 switch to HTC
└── 2011-03-31-to-2013-05-01 ALL HTC pics-backup-prior-to-factory-reset

これら2つのディレクトリとすべてのコンテンツが占めるディスク容量を確認したいと思います。
たとえば、希望の出力は次のようになります。

2.7G  2007-06-20_to_2008-10-01
200MB 2008-07-21_to_2008_08_12-Nokia 2mp
1.3G  2009-11-01_to_2011-01-10 - All iphone Pics
667MB 2011-01-01 palliser-pics
2.3G  2011-03-10_to_2011-04-12-few iphone pics b4 switch to HTC
123MB 2011-03-31-to-2013-05-01 ALL HTC pics-backup-prior-to-factory-reset

だから私は次のような努力をしてきました。

find .  -maxdepth 1 -type d | xargs du -h 

ただし、一部のディレクトリ名にはスペースが含まれているため、出力の各行はfindに渡される前に ' をたくさん生成します。この問題を解決する方法はありますか?WORDxargs

rename問題の根本原因はファイルの空白が原因であることがわかります。を使用してディスクサイズを取得する方法が見つからない場合は、du次の方法で問題を解決します。findxargs

ベストアンサー1

find | xargs-print0-0必ず次の説明と一緒に使用してくださいman find

   -print0
          True; print the full file name on the standard output, followed
          by a null character (instead of the newline character that
          -print uses).  This allows file names that contain newlines or
          other types of white space to be correctly interpreted by
          programs that process the find output.  This option corresponds
          to the -0 option of xargs.

だからあなたは次のことをしたいと思います
find . -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0 du -sh
findzsh
print -N *(/) | xargs -0 du -sh

du -sh *(/)

おすすめ記事