次のコマンドを使用して、ディレクトリリストとそのサイズを取得し、それらを最大から最小の順に並べ替えることができます(この例では、わかりやすくするためにディレクトリ名を数字に変更しました)。
$: du -sk [a-z]* 2>/dev/null | sort -nr
413096 one
106572 two
97452 three
76428 four
55052 five
45068 six
33680 seven
23220 eight
17716 nine
私はこれらのディレクトリを最大から最小の順に入力する必要があるプログラムを作成していますが、便宜上、すべてを1行に入力する必要があります。サイズを表示せずに1行にディレクトリを最大から最小までソートできるコマンドはありますか?
出力が次のようになります。
one two three four five six seven eight nine
ベストアンサー1
ディレクトリ名にスペースが含まれていないと確信している場合は、すべてのディレクトリ名を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
出力に含まれるかどうかです。