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


11

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

find / -maxdepth 10 -size +100000 -ls

に変え-lsてみました-lshが許可されません。

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


人間が読めるようにあなたの定義は何ですか?私にとってはそれは人間が十分に読めるものです。
manatwork 2014

fileユーティリティを試す必要がありますfind
Ramesh 14

@manatwork kb、mb、gb
blarg 2014

回答:


10

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

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

4

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

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

2番目のコマンドに下限を設定する方法はありますか?最大のファイルが上部に表示され、シェルの上部からすぐに消えます編集-rを削除する必要があるだけです
blarg

> outputコマンドに追加することにより、出力をファイルにリダイレクトできます。次に、ファイルを開いて、必要に応じて出力を表示できます:)
Ramesh

私はファイルだけ後だのに対し、私は、あまりにもこのディスプレイフォルダを参照してください
blarg

du -a --max-depth=10 / | sort -rn私が思いつくことができた近いです。ただし、この場合、サイズはKB、MB、GBで表示されません。
Ramesh 14

1

あとは次のようなものだと思います。

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

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


2
実際に{}ここを引用する必要はまったくありません。コマンド内の一重引用符はシェル用ですが、シェルはls -lah <args...>コマンドをまったく表示{}しません。引用符で囲む必要はありません。それはfindそれが見るls -lah {}とそれはfindそれは拡大{}、およびの名前によって暗示として-execオプション、find使用してexec*直接引数にシステムコールを、そのためのスペースを持つすべての問題がないだろうfind単語分割をするつもりされていませんあなたのファイル名に。
jw013 2014

1
-aオプションは、ls引数がファイルではなくディレクトリであることが予想されるので、不要です。GNUは、用途を見つけるls -dilsために-ls、オプションをので、それが最も密接にそれは次のようになり複製しますls -dilsh
jw013 2014

男の検索は、使用しての最初の例については、以下を示します-execfind . -type f -exec file '{}' \; 実行ファイルをカレントディレクトリにあるか下のすべてのファイルに。中括弧は、シェルスクリプトの句読点として解釈されないように、単一引用符で囲まれていることに注意してください。セミコロンは、バックスラッシュを使用して同様に保護されますが、その場合も単一引用符を使用できます。
Tim Hughes

1
マンページは単にいくつかの不必要な注意を提唱しています。害はありませんが、{}引用する必要のあるシェルについては知りません。
jw013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.