4

私は dusort と呼ばれる du のこの甘いエイリアスを使用していました。これは、サイズでソートされたトップレベルのサブディレクトリとファイルのサイズの人間が読めるリストを出力するものでした。ターミナルで動作するMac用のミニファイルライトのようなものでした。

しかし、Mac OS 10.6 を実行している新しい Mac にエイリアスをコピーしたところ、エイリアスが壊れてしまいました。どうやら私が使用した種類は、fink (新しい Mac に再インストールするのを避けようとしている) からのものか、10.6 で出荷されたものは 10.4 で出荷されたものよりも機能が少ない (可能性ははるかに低い) ようです。

これは、機械可読ファイルサイズと人間可読ファイルサイズの両方を取得するために du を 2 回実行する必要があるため、少し厄介な古いエイリアスです (実際には、これを #!/bin/bash を使用して ~/bin にスクリプトとして保存しています)しかし、それは問題ではありません): sort -n +1 <(paste <(du -hd1|cut -f1) <(du -d1))|cut -f1,3

A. 再び機能させるには?B. bash ウィザードリを使用して、このコマンドをよりエレガントにしますか?

du の出力を一時ファイルや fifo などのナンセンスにコピーすることでこれを修正できることはわかっていますが、これはばかげています。私はここに来ることに決めました。お知らせ下さい。:)

編集:

考えてみると、これは機能します:

sort <(paste <(du -d1|cut -f1) <(du -hd1))|cut -f2,3

それでも、特に du を2回呼び出すと、大きなファイルツリーで5分から10分の違いが生じる可能性があります...それをクリーンアップするためのアドバイスはありますか?

4

2 に答える 2

1

私はこれを Red Hat Linux で使用していますが、おそらく BSD でも動作しますか?:

du -sk * | sort -n | awk '
{ if ($1 < 1024) { output("K", 1) }
  else if ($1 < 1048576) { output("M", 1024) }
  else { output("G", 1048576) }
}

function output(size, div)
{
  printf "%d%s\t%s\n", ($1/div), size, $2
}
'

または、エイリアスとして設定するには、引用符が必要です。

alias dusort='du -sk * | sort -n | awk '\''
{ if ($1 < 1024) { output("K", 1) }
  else if ($1 < 1048576) { output("M", 1024) }
  else { output("G", 1048576) }
}
function output(size, div)
{
  printf "%d%s\t%s\n", ($1/div), size, $2
}
'\'''

テラバイトのファイルがある場合は、それを拡張する必要があります...

于 2010-08-23T10:07:57.963 に答える
-1
alias dsize='for dir in *; do du -skh $dir; done | sort -n'

次のような出力を提供します(dataimgutilはディレクトリです):

$ dsize
1.9G     data
4.0K     getLinkMentionCounts.bash
4.0K     img
28K      util
于 2012-06-26T19:14:26.740 に答える