GNU/Linux >> Linux の 問題 >  >> Linux

単一行の最大から最小までのサイズに基づくディレクトリの一覧表示

ディレクトリ名に空白が含まれていないことが確実な場合は、すべてのディレクトリ名を 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 を呼び出します。 ファイルごとに、そのリストを並べ替えます。ファイル名には、スペース、タブ、改行を含む任意の文字を含めることができることに注意してください。


Linux
  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. Linuxで最大のファイルとディレクトリを探す

  3. Lsからの出力には改行がありますが、1行で表示されます。なんで?

  1. 拡張子に基づいてファイルをディレクトリに移動する

  2. コマンドラインからGnomeを使用してファイル/ディレクトリを起動

  3. コマンド ラインからパーティション ラベルを一覧表示する

  1. Sed改行から文字を削除しますか?

  2. fdisk - 単一行のパーティション

  3. コマンドラインからの Clonezilla