“Total <size>” satırını ls -l çıktısından çıkarmanın en kolay yolu nedir?


14

Google aracılığıyla bulabildiğim en iyi man lsşey:

ls -l | grep -v '^total'

Bayraklarda eksik olduğum bir şey var mı ls?

Ayrıca, -h bayrağına bakılmaksızın toplam boyut neden kb cinsindendir? çizik, öyle görünüyor, o zaman ne gördüğümden emin değilim.


4
Belki biraz daha verimli olabilirdi ls -l | tail -n+2, geri kalanı için bir cevabım yok.
enzotib

Enzotib'in yöntemini daha çok seviyorum. Öneri: takma ad olarak ayarlayın ve adlandırın lsl. Sadece 3 harf;) oh ve ls -lh bana 1.2K tarzı boyutları gösterir.
Rinzwind

Bence en kolay yol.
Robert

Yanıtlar:


11

Kaynak koduna bakarak , dizinlerde seçeneği kullanırken her zaman görüntüleneceğini coreutilsöğrendim .total-l

-dDizin içeriği yerine girişleri listeleme seçeneğini kullanarak gizler total. Ancak bunu bağımsız değişkenler olmadan (veya bir dizinde) çalıştırırsanız, içeriğini değil, dizini gösterir. Bu nedenle, joker karakterlere ihtiyacınız var. *tüm dosyaları ve .*gizli dosyaları da eşleştirir (bu seçenekle karşılık gelir -a):

ls -ld * .*

-hSeçenek gelince , benim için çalışıyor. 1118360 bayt 1,1M olarak görünür. 1024'ten küçük dosyalar bayt olarak gösterilir.


1
Aslında -d girişler yerine dizinleri listeler.
H2ONaCl

@broiyan lsKılavuz sayfasını mektuba götürebilir veya bunu düşünebilirsiniz: ls /" /bir dosya ise girdiyi listele veya bir dizinse dizin içeriğini listele" şeklinde yorumlanabilir /. Kullanıldığında -dson koşul kaldırılır ve dizin içeriği yerine her zaman giriş yazdırılır. Bir yol bir dosya veya dizin olursa olsun bu geçerlidir.
Lekensteyn

Eğer yapabilirsem bunu tekrar değerlendiririm
dps

7

lsDizin listesinin çalıştırılmasını önlemek için joker karakterler kullanmak yetersizdir, çünkü lsgibi seçenekleri kullanmanızı engeller --almost-all.

Gibi Enzotib önerisi , kaldırmak için en basit yolu borusuna o geçer taililk satırı kesecek. Ancak, lsçıktısının etkileşimli olmaktan ziyade bir boru olduğunu algılar ve varsayılanlarını istenmeyen bir şekilde değiştirir. Bu nedenle, sağlam hale getirmek için bazı seçenekler de eklemelisiniz:

  • --color=always: renkleri göstermeye devam et
  • --hide-control-chars: ?konsol çıktısını bozabilecek kontrol karakterleri yerine dosya adlarında yazdırın

Bir komut dosyası var ~/bin/l(ayrıca bir Bash takma adı kullanabilirsiniz ~/.bash_aliases):

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

Ayrıca ls, varsayılan olarak istediğiniz diğer seçenekleri de ekleyebilirsiniz --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.


Ancak, ls'ye birden fazla dosya adı iletirseniz bu çalışmaz.
Sparhawk

3

ls -l *

Klasör içeriği olmadan "normalde adlandırılmış" verir total. Bu ihtiyaçlarınız için uygun olabilir. Ne yazık ki, dotönekli dosyaları vermeyecektir . Eğer ls -l * .*linux ağaçta ilerleyeceği için kullanırsanız bir karışıklık yaşarsınız.

Nokta önekinin klasör anlamına gelebileceğini veya bir joker karakterle yukarıdaki klasör anlamına geldiğini unutmayın, bu nedenle nokta önekine sahip normal dosyaları seçmenize yardımcı olmaz. Bu talihsiz bir tasarım kararı gibi görünüyor.


1

$ ls -l [DIRECTORY] | sed 1d
(çıktıda dosya adları var)

$ ls -ld [path-to-dir]/*
(çıktı göreli yollar içerir, ancak renkleri korur)

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

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


Not:
"total ...." adlı bir dosyanız varsa aşağıdakiler çalışmaz.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.