duしきい値の代替

duしきい値の代替

特定のサイズより大きいディレクトリを検索する方法を探しています。私は次が非常にうまく動作することがわかりました。

# du -sh /var/log/ --threshold=5G
5.3G    /var/log/

問題は、--thresholdがUbuntuでのみサポートされているようです。たとえば、CentOSで試してみると、次のような結果が表示されます。

# du -sh /var/log/ --threshold=5G
du: unrecognized option '--threshold=5G'
Try `du --help' for more information.

CentOS、Ubuntu、Debianで動作する代替手段を知っている人はいますか?

du -sフラグをサポートするには(サブディレクトリのサイズを除く)、同等のものが確実に必要であることに注意してください。

答え1

--threshold使用可能なコマンドは次のとおりです。

  • Ubuntu 18.04/20.4
  • Debian 提示 8/stretch 9 バスター 10
  • セントース7

大きなコマンドライン:

(
  THRESHOLD='200M' 
  PATTERN='==========---------========----'
  ( 
    sudo find / -type d -print0 2>/dev/null | \
         sudo xargs -0 -P4 -- du -sh  2>/dev/null ;
    echo "${THRESHOLD} ${PATTERN}" 
  ) | sort -h | sed "0,/${PATTERN}/ d"
)

注:フォルダ名にスペースがある場合は、-print02つのファイル間の区切り文字が役立ちます。\0

-0区切り文字を含むストリームを読み取るように xargs に指示する\0

-P4ある程度の並列処理で4を実行するように指示します。

0,/REGEX/ dsed最初の行とREGEXに一致する行の間の行を削除するように指示します。

添付:

Centos 6では使用できません。

答え2

#EchoMike444で述べたように、このオプションはCentOS 7のコマンド--thresholdでは機能しますが、CentOS 6以前のバージョンでは機能しません。du私の評判が足りず、彼の解決策について言及することはできませんが、かなりうまくいくと言いたいです。そのコマンドを理解していないsedため、タスクを完了するのに役立つ可能性があるいくつかの代替コマンドは次のとおりです。

実行したコマンドは要約のみ実行します。/var/ログ/ディレクトリですが、サブディレクトリは含まれません。

# du -sh /var/log/ --threshold=5G

CentOS 7を使用している場合、次のコマンドを実行すると、/var/log/ディレクトリツリー内のすべての5G以上のディレクトリのストレージ容量が表示されます。

# find /var/log/* -type d | xargs du -h --threshold=5G | sort -hr

あなたがそれをどのように使用するかはよくわかりませんが、ここであなたに役立つものがあります。次のコマンドは、探しているコンテンツを正確には提供しませんが、ディレクトリ内で最大10個のサブディレクトリを識別します。/var/ログ/目次。 echoコマンドの出力よりも高い内容が希望の内容になります。

# (find /var/log/* -type d -exec du -sh {} \; ; echo "5G ####################") | sort -hr | head

簡単にするには、次のコマンドを実行すると上記と同じ結果が得られますが、echoコマンドの出力は除外されます。

# find /var/log/* -type d -exec du -sh {} \; | sort -hr | head

5G以上のファイルを探している場合は、次のコマンドを使用してその結果を取得できます。

# find /var/log/ -size +5G -exec ls -l {} \; | sort -nr -k5

関連情報