Apa cara termudah untuk menghapus baris “total <size>” dari output ls -l?

14

Yang terbaik yang bisa saya temukan melalui Google / man lsadalah:

ls -l | grep -v '^total'

Apakah ada sesuatu yang saya lewatkan di bendera ls?

Juga, mengapa ukuran total dalam kb, terlepas dari flag -h? menggaruk itu, sepertinya tidak, tidak yakin apa yang saya lihat saat itu.

Tom
sumber
4
Mungkin sedikit lebih efisien bisa ls -l | tail -n+2, untuk selebihnya saya tidak punya jawaban.
enzotib
Saya lebih suka metode enzotib. Saran: atur sebagai alias dan beri nama lsl. Hanya 3 huruf;) oh dan ls -lh menunjukkan ukuran 1.2K.
Rinzwind
Saya pikir Anda sudah mendapatkan cara termudah.
Robert

Jawaban:

11

Melihat dalam kode sumber coreutils, saya menemukan bahwa totalakan selalu ditampilkan ketika menggunakan -lopsi pada direktori .

Menggunakan -dopsi untuk membuat daftar entri alih-alih menyembunyikan isi direktori total. Tetapi jika Anda menjalankannya tanpa argumen (atau pada direktori), itu hanya akan menunjukkan direktori dan bukan isinya. Karena itu, Anda memerlukan wildcard. *cocok dengan semua file dan .*cocok dengan file tersembunyi juga (yang sesuai dengan -aopsi):

ls -ld * .*

Adapun -hopsi, itu berfungsi untuk saya. 1118360 byte muncul sebagai 1.1M. File yang lebih kecil dari 1024 muncul dalam byte.

Lekensteyn
sumber
1
sebenarnya -d mendaftar direktori bukan entri.
H2ONaCl
@broiyan Anda dapat membawa lshalaman manual ke surat atau mempertimbangkan ini: ls /dapat diartikan sebagai "daftar entri /jika itu adalah file atau isi direktori /jika itu adalah direktori". Menggunakan -dmenghapus kondisi terakhir dan akan selalu mencetak entri bukan isi direktori. Ini berlaku tidak peduli apakah path adalah file atau direktori.
Lekensteyn
Saya akan memperbaiki ini lagi jika saya bisa
dps
6

Menggunakan wildcard untuk menghindari lsmenjalankan daftar direktori tidak optimal, karena mencegah Anda menggunakan lsopsi seperti --almost-all.

Seperti saran Enzotib , cara paling sederhana untuk menghapusnya adalah menyalurkannya tailuntuk memotong baris pertama. Namun, lsakan mendeteksi bahwa outputnya adalah pipa daripada interaktif, dan mengubah standarnya dengan cara yang tidak diinginkan. Oleh karena itu, untuk membuatnya kuat, Anda juga harus menambahkan beberapa opsi:

  • --color=always: terus menunjukkan warna
  • --hide-control-chars: cetak ?nama file menggantikan karakter kontrol yang dapat mengacaukan output konsol

Saya memiliki skrip ~/bin/l(Anda juga dapat menggunakan alias Bash di ~/.bash_aliases):

#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2

Anda juga dapat menambahkan lsopsi lain yang Anda inginkan secara default, misalnya --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.

Siput mekanik
sumber
Namun, ini tidak akan berfungsi jika Anda jika Anda memberikan banyak nama file ke ls.
Sparhawk
2

ls -l *

Akan memberi Anda isi folder "biasanya dinamai" tanpa total. Itu mungkin cocok untuk kebutuhan Anda. Sayangnya, itu tidak akan memberi Anda dotfile awalan. Jika Anda menggunakan ls -l * .*Anda akan mendapatkan kekacauan karena linux akan menavigasi pohon.

Perhatikan awalan titik bisa berarti folder atau dengan wildcard itu berarti folder di atas sehingga tidak membantu Anda untuk memilih file biasa yang diawali titik. Ini tampaknya menjadi keputusan desain yang tidak menguntungkan.

H2ONaCl
sumber
0

$ ls -l [DIRECTORY] | sed 1d
(output berisi nama file)

$ ls -ld [path-to-dir]/*
(output berisi jalur relatif tetapi akan mempertahankan warna)

$ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


Catatan:
Berikut ini tidak berfungsi jika Anda memiliki file bernama "total ...."

$ ls -l | grep -v '^total'

Robert Vila
sumber