私はこのページが好きで、ここで答えを見つけることができたらと思います。
そのため、特定のファイルシステム(一部の要件に応じて動的に生成された保存ファイルに保存)で、一部のディレクトリを除くすべてのディレクトリのディスク使用量を確認したいと思います。
しかし、除外コマンドに値を直接ハードコーディングすると、速度が非常に速く、結果も正確であることが観察されました。しかし、除外コマンドにコマンドを渡すとき。この作業は時間がかかり、誤った結果をもたらします。いつもハードコーディングしたくない。提案してください。
エンコードされたバージョン(a、bはサブディレクトリ) - 正しい結果を提供する
du -sh --exclude={a,b} filesystem/*
コマンドバージョン
aとbのディレクトリ名を含むファイル(directory_list.txt)があるとします。
du -sh --exclude={`cat directory_list.txt`} /filesystem/*
また、思い出されるのは、除外によって正確で時宜を得た結果が出ないので、希望のディレクトリだけを選択すればよいということです。
次のように
ls filesystem/ | grep -v $(cat directory_list.txt) > selected.txt --
ディレクトリ以外の必要なディレクトリのみを選択してください。
du -sh $(cat selected.txt)
しかし、より良い方法と、私のコマンドが除外コマンドで機能するようにする方法を提案してください。ありがとう Muhammad
答え1
Linuxのコマンドdu
(使用中のように見える)は、次の--exclude-from
オプションを提供します。
du -h -s --exclude-from=directory_list.txt /filesystem/*
または
du -h -s -X directory_list.txt /filesystem/*
これは、ファイルdirectory_list.txt
に除外する必要がある1行に1つのシェルワイルドカードパターン(正規表現ではない)が含まれていると仮定します。これらのパターンはパス名、単にファイルまたはディレクトリ名、またはシェルワイルドカード文字を含めることができます。
使用しているコマンドで--exclude={`cat directory_list.txt`}
シェルに中括弧拡張を使用させたいとしますdirectory_list.txt
。支柱の拡張を実行しても機能しません。今後コマンドの置き換えも検討してください。
あなたは何ですかできるdu
存在しない場合は、--exclude-from
ファイルから除外する項目を配列として読み、各--exclude=
要素に追加してから、呼び出しでその配列を使用しますdu
。
exclude=()
while IFS= read -r item; do
exclude+=( --exclude="$item" )
done <directory_list.txt
du -h -s "${exclude[@]}" /filesystem/*
--exclude-from
これは、ファイルが1行に1つのパターンを含むと仮定します。
使用しているシェルが配列をサポートしていない場合は、入力数を減らすことができます。
set --
while IFS= read -r item; do
set -- "$@" --exclude="$item"
done <directory_list.txt
du -h -s "$@" /filesystem/*
これは、名前付き配列の代わりに位置引数のリストを使用します。
どちらのループもパス名のスペースも保持し、シェルがファイル名のグロービングパターンを誤って拡張することを許可しません。これはコマンドに関連するいくつかの問題ですgrep -v $(cat directory_list.txt)
。もう1つは、ファイルのパス名のほとんどをgrep
検索するファイルに渡すことです。除外するパターンの代わりに)。
答え2
これはあなたの質問に正確には答えませんが、時には人々がdu -sh
ディスク占有を見つけるために痙攣を引き起こすことがあります。
この場合、ncduツールの使用を検討する必要があります。呪いベースで、高速で矢印キーを使用してツリーをナビゲートすると、消費された合計ディスク容量に基づいてすべてがソートされます。