1行のサイズに基づいて、最大から最小までのディレクトリを一覧表示します。

1行のサイズに基づいて、最大から最小までのディレクトリを一覧表示します。

次のコマンドを使用して、ディレクトリリストとそのサイズを取得し、それらを最大から最小の順に並べ替えることができます(この例では、わかりやすくするためにディレクトリ名を数字に変更しました)。

$: 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出力に含まれるかどうかです。

おすすめ記事