GNU/Linux >> Belajar Linux >  >> Linux

Mencantumkan direktori berdasarkan ukuran dari yang terbesar hingga yang terkecil dalam satu baris

Jika Anda yakin bahwa nama direktori tidak mengandung spasi, maka mudah untuk mendapatkan semua nama direktori dalam satu baris:

du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

Memasukkan informasi ke dalam python

Jika Anda ingin menangkap keluaran itu dalam program python dan membuatnya menjadi daftar. Menggunakan python2.7 atau lebih baik:

import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()

Di 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()

Kita juga dapat memanfaatkan fitur python untuk mengurangi jumlah pekerjaan yang dilakukan oleh shell dan, khususnya, untuk menghilangkan kebutuhan akan awk :

subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]

Seseorang dapat melangkah lebih jauh dan membaca du keluaran langsung ke python, ubah ukuran menjadi bilangan bulat, dan urutkan berdasarkan ukuran. Namun, ini lebih sederhana, cukup lakukan ini dengan sort -nr di dalam cangkang.

Menentukan direktori

Jika direktori yang ukurannya Anda inginkan tidak ada di direktori saat ini, ada dua kemungkinan:

du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

dan juga:

cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

Perbedaan antara keduanya adalah apakah /some/path termasuk dalam output atau tidak.


Menggunakan paste

du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -

zsh memiliki kemampuan untuk mengurutkan gumpalannya menggunakan kualifikasi globbing. Anda juga dapat menentukan kualifikasi glob Anda sendiri dengan fungsi. Misalnya:

zdu() REPLY=$(du -s -- "$REPLY")

print -r -- [[:alpha:]]*(/nO+zdu)

akan mencetak direktori (/ ) yang namanya dimulai dengan huruf (btw, [a-z] hanya masuk akal di lokal C) secara numerik (n) diurutkan terbalik (O) menggunakan zdu fungsi.

Perhatikan bahwa ketika Anda melakukannya:

du -s a b

Jika a dan b berisi hardlink ke file yang sama, penggunaan disk mereka akan dihitung untuk a tetapi tidak untuk b . zsh pendekatan di sini menghindari itu.

Jika Anda akan menggunakan python, saya akan melakukan hal yang sama dari sana:panggil du -s untuk setiap file, dan urutkan daftar itu di sana. Ingatlah bahwa nama file dapat berisi karakter apa pun termasuk spasi, tab, dan baris baru.


Linux
  1. Cara Menghapus File dan Direktori di Linux dari Command Line

  2. Pindahkan file ke direktori berdasarkan ekstensi

  3. Daftar label partisi dari baris perintah

  1. Cari Torrents Dari Command Line Di Linux

  2. fdisk - partisi dalam satu baris

  3. Clonezilla dari Baris Perintah

  1. Temukan file dan direktori terbesar di Linux

  2. Output Dari Ls Memiliki Baris Baru Tapi Ditampilkan Pada Satu Baris. Mengapa?

  3. Sed Hapus Karakter Dari Baris Baru?