合計サイズが300GBの約100万のフォルダへのパスがあります。コマンドを実行すると、du -sh *
タイトルに記載されているエラーが発生します。このコマンドをどのように組み合わせることができますか?xargs
それともxargs
問題は解決しますか?ただし、同じパスで20 GBを超えるフォルダを見つけるには、別々のコマンドが必要です。これら2つのコマンドを使用するのに助けが必要です。
パスの例:/data/dataold/exports/
出力は次のようになります。以下の言葉は、前の行で指定したホームパスの下のファイルとフォルダ名と考えることができます。
4.0K xyz.sh 12K asdasda.txt 10G QWERT 1G ASDFGH
ありがとうございます。
答え1
1つのオプションはを使用することですが、find
以下に示す他の解決策の1つを使用することをお勧めします。
find /data/dataold/exports -mindepth 1 -maxdepth 1 -exec du -sh {} \;
/data/dataold/exports
サブディレクトリが含まれていると仮定
foo
bar
baz
(たぶんそれ以上)実行されます。
du -sh /data/dataold/exports/foo
du -sh /data/dataold/exports/bar
du -sh /data/dataold/exports/baz
など。
オプションはコマンドの-mindepth
実行を防ぎ、サブディレクトリのサブディレクトリからのforなどのコマンドの実行を防ぎます。du
/data/dataold/exports
-maxdepth
/data/dataold/exports/foo/something
提案通りカス'コメントを使用してください。
find /data/dataold/exports -mindepth 1 -maxdepth 1 -exec du -sh {} \+
代わりに... -exec du -sh {} \;
、あなたのバージョンがfind
この機能をサポートしている場合。+
代わりに、ファイル/ディレクトリごとに1回ではなく、;
バッファがいっぱいになるたびに(約2MB)、Linux引数バッファが1回実行されます。前者はfind
du
たくさん急いで。
引用するスティーブン・チャジェラス' 注: 「これらの最上位ディレクトリ間にハードリンクがある場合は、複数の独立した呼び出しdu
(たとえば、データ重複排除の実行) を呼び出します。find -exec
du
du
GNUを使用すると、次のオプションを使用して表示する深さを制限できます。-d
--max-depth=N
du -h -d 1 /data/dataold/exports
これはすべてのサブディレクトリを計算しますが、出力を開始点より下の深さ1に制限するため、上記の例ではフルサイズを印刷する必要があります。
/data/dataold/exports/foo
/data/dataold/exports/bar
/data/dataold/exports/baz
など
/data/dataold/exports
du
2番目のソリューション(利用可能な場合)を推奨する必要があります。これは、パラメータバッファを埋めるために各サブディレクトリ(の場合)または各サブディレクトリのセットに対して新しいプロセスを開始する必要がないためです-exec ... \;
(の場合-exec ... \+
)。
あなたのバージョンが利用可能なオプションをサポートしていないdu
場合-d
du -h /data/dataold/exports
次に、出力をフィルタリングして、サブディレクトリの最初のレベルより下のすべてのエントリを削除します。
数値比較で出力をフィルタリングするには、このオプションを省略することをお勧めします-h
。フィルタリングをテストするときに遅いファイルシステムへのアクセスを待たないようにするには、出力をファイルにリダイレクトすることをお勧めします。
du -d 1 /data/dataold/exports > outputfile
または
du -d 1 /data/dataold/exports 2>errors | tee outputfile
次の内容を処理しますoutputfile
。
例:
awk '$1 > 20e9` outputfile
du
オプションがサポートされていない場合は、次のものを-d
使用できます
du /data/dataold/exports > outputfile
awk '$1 > 20e9 && $1 != /\/.*\/.*\/.*\/.*\/.*/` outputfile
これにより、最初のフィールドの数字が20 * 10^9より大きく、2番目のフィールドの値に5つ以上のスラッシュが含まれていないすべての行が印刷されます。 2番目の条件のスラッシュ数は開始ディレクトリに従ってカスタマイズされ、egは/data/dataold/exports
印刷されますが、/data/dataold/exports/foo
egは印刷されません/data/dataold/exports/foo/bar
。
答え2
要約せずにdu
作業が完了するようにしてください。sort
ユーザーの注文ごとに適用し、-h
特定のサイズに制限します。
du -h /data/dataold/exports/ | sort -h
最大から最小までの順番で-r
ファイルを一覧表示するために使用されます。sort
サイズを選択するには、次awk
の簡単な方法を使用できます。
du -h /data/dataold/exports/ | awk -F'G' '$1~/^[0-9]+$/ && $1>=20' | sort -h
つまり、G
GBサイズの出力でフィールド区切り文字として使用し、フィールドに数字のみがあることを確認してから(G区切り文字と間違った一致を除外するため)、20より大きい数字のみを選択します。ここでソートするのはオプションです。