ディレクトリ名に空白が含まれていないことが確実な場合は、すべてのディレクトリ名を 1 行で簡単に取得できます。
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
情報を Python に取り込む
その出力をpythonプログラムでキャプチャしてリストにしたい場合。 python2.7 以上を使用:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
Python2.6 の場合:
import subprocess
subprocess.Popen("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True, stdout=subprocess.PIPE).communicate()[0].split()
また、Python の機能を利用して、シェルによって実行される作業量を削減し、特に awk
の必要性をなくすこともできます。 :
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
さらに進んで du
を読むことができます Python に直接出力し、サイズを整数に変換し、サイズで並べ替えます。ただし、これを sort -nr
で行う方が簡単です。
ディレクトリの指定
必要なサイズのディレクトリが現在のディレクトリにない場合、2 つの可能性があります:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
また:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
この 2 つの違いは、/some/path
かどうかです。 出力に含まれているかどうか。
paste
の使用
du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -
zsh
グロブ修飾子を使用してグロブをソートする機能があります。関数を使用して独自の glob 修飾子を定義することもできます。例:
zdu() REPLY=$(du -s -- "$REPLY")
print -r -- [[:alpha:]]*(/nO+zdu)
ディレクトリを出力します(/
) 名前が文字で始まる (ところで、[a-z]
C ロケールでのみ意味があります) zdu
を使用して数値 (n) 逆ソート (O) 関数。
その際、次の点に注意してください:
du -s a b
a
の場合 および b
同じファイルへのハードリンクが含まれている場合、それらのディスク使用量は a
としてカウントされます ただし、b
ではありません . zsh
ここでのアプローチはそれを回避します。
Python を使用する場合は、そこから同じことを行います:du -s
を呼び出します。 ファイルごとに、そのリストを並べ替えます。ファイル名には、スペース、タブ、改行を含む任意の文字を含めることができることに注意してください。