Centosサーバーですべての大きなファイルを見つけようとしています。そのために私は使用しています:
find / -maxdepth 10 -size +100000 -ls
に変え-ls
てみました-lsh
が許可されません。
これらの結果を人間が読めるサイズ(接尾辞k、Mなどを使用)で表示するにはどうすればよいですか?
file
ユーティリティを試す必要がありますfind
。
Centosサーバーですべての大きなファイルを見つけようとしています。そのために私は使用しています:
find / -maxdepth 10 -size +100000 -ls
に変え-ls
てみました-lsh
が許可されません。
これらの結果を人間が読めるサイズ(接尾辞k、Mなどを使用)で表示するにはどうすればよいですか?
file
ユーティリティを試す必要がありますfind
。
回答:
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回」を表現する方法がないため、扱いが面倒です。デバイス間の再帰を回避するには、d
glob修飾子を使用します。デバイス番号を見つける必要があります。デバイス番号は、stat
Linux のコマンド(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
利用できるオプションがありませんでした。
コメントで述べたように、人間が読める形式は、ファイルのサイズがkb、mb、または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
> output
コマンドに追加することにより、出力をファイルにリダイレクトできます。次に、ファイルを開いて、必要に応じて出力を表示できます:)
du -a --max-depth=10 / | sort -rn
私が思いつくことができた近いです。ただし、この場合、サイズはKB、MB、GBで表示されません。
あとは次のようなものだと思います。
find / -maxdepth 10 -size +100000 -exec ls -lah {} +
を-exec
使用すると、コマンドを実行でき{}
、検索結果に置き換えられます。最後に、+
それがコマンドの終わりであり、それが必要であることを見つけることを伝えることです。
{}
ここを引用する必要はまったくありません。コマンド内の一重引用符はシェル用ですが、シェルはls -lah <args...>
コマンドをまったく表示{}
しません。引用符で囲む必要はありません。それはfind
それが見るls -lah {}
とそれはfind
それは拡大{}
、およびの名前によって暗示として-exec
オプション、find
使用してexec*
直接引数にシステムコールを、そのためのスペースを持つすべての問題がないだろうfind
単語分割をするつもりされていませんあなたのファイル名に。
-a
オプションは、ls
引数がファイルではなくディレクトリであることが予想されるので、不要です。GNUは、用途を見つけるls -dils
ために-ls
、オプションをので、それが最も密接にそれは次のようになり複製しますls -dilsh
。
find . -type f -exec file '{}' \;
実行ファイルをカレントディレクトリにあるか下のすべてのファイルに。中括弧は、シェルスクリプトの句読点として解釈されないように、単一引用符で囲まれていることに注意してください。セミコロンは、バックスラッシュを使用して同様に保護されますが、その場合も単一引用符を使用できます。
{}
引用する必要のあるシェルについては知りません。