web-dev-qa-db-ja.com

検索結果に「人間が読める」ファイルサイズを表示する方法

私のCentosサーバーですべての大きなファイルを見つけようとしています。そのために私は使用しています:

find / -maxdepth 10 -size +100000 -ls

変更してみました-lsから-lshが許可されていません。

これらの結果を人間が読めるサイズ(接尾辞k、Mなどを使用)で表示するにはどうすればよいですか?

11
blarg

findには、lsのような高度なオプションはありません。 ls -hが必要な場合は、lsを呼び出す必要があります。

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

-xdevオプションをお勧めします。これは、他のファイルシステムに再帰しないようにするためです。これは、ディスク領域が心配な場合は役に立ちません。

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

シェルとしてzshを使用する場合、findを使用する代わりに、glob修飾子を使用できます。ファイルサイズの制限は簡単です。Lの後にサイズを指定します。サイズには、数値の前にオプションの単位を付けることができます。最大深度を気にしない場合は、**/を使用してサブディレクトリに再帰できます。最大深度を気にする場合は、zsh globパターンに「最大nオカレンス」を表現する方法がないため、面倒です。デバイス間の再帰を回避するには、d glob修飾子を使用します。 Linuxのstatコマンドで表示できるデバイス番号を見つける必要があります(数値のみを表示するにはstat -c %d /)、またはzsh独自のstatビルトイン(それをロードするにはzmodload zsh/statを実行)を使用します。

ls -lh /**/*(L+M99d$(stat -c %d /))

あなたがしようとしているコマンドは私には判読可能です。ただし、次のように検索でファイルユーティリティを使用できます。

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

これを行う別の方法は、以下のコマンドを使用することです。

du -BM / | sort -nr

上記のコマンドは、ソートされたファイルサイズでファイルを提供します。

coreutils> 7.5 を使用している場合は、以下のコマンドを発行して、サイズ別にファイルを一覧表示できます。

du -ah / | grep -v "/$" | sort -h

私のマシンでは、sort -hオプションが利用可能です。

コメントで述べたように、人間が読める形式は、ファイルのサイズがkbmbである必要がありますまたはgb。答えとして投稿した2番目のコマンドを使用します。私のシステムで使用したときに得られた出力は、

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking
4
Ramesh

あとは次のような感じです。

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-execを使用すると、コマンドと{}は、検索の結果で置き換えられます。最後に+は、コマンドの終わりであり、それが必要であることを見つけることを伝えます。

1
Tim Hughes