Jaki jest najprostszy sposób na usunięcie linii „total <size>” z wyjścia ls -l?

14

Najlepsze, co mogłem znaleźć przez Google / man lsto:

ls -l | grep -v '^total'

Czy jest coś, czego brakuje mi na flagach ls?

Ponadto, dlaczego całkowity rozmiar w kb, niezależnie od flagi -h? podrap to, jak się wydaje, nie jestem pewien, co wtedy widziałem.

Tomek
źródło
4
Być może może być nieco bardziej wydajny ls -l | tail -n+2, na resztę nie mam odpowiedzi.
enzotib
Bardziej podoba mi się metoda enzotib. Sugestia: skonfiguruj jako alias i nazwij go lsl. Tylko 3 litery;) oh i ls -lh pokazuje mi rozmiary w stylu 1,2K.
Rinzwind,
Myślę, że masz najłatwiejszy sposób.
Robert

Odpowiedzi:

11

Przeglądając kod źródłowy coreutils, dowiedziałem się, że totalzawsze będzie wyświetlany przy korzystaniu z -lopcji w katalogach .

Korzystanie z -dopcji wyświetlania pozycji zamiast zawartości katalogu ukrywa total. Ale jeśli uruchomisz to bez argumentów (lub w katalogu), po prostu pokaże katalog, a nie jego zawartość. Dlatego potrzebujesz symboli wieloznacznych. *dopasowuje wszystkie pliki i .*dopasowuje również ukryte pliki (co odpowiada -aopcji):

ls -ld * .*

Jeśli chodzi o -hopcję, to działa dla mnie. 1118360 bajtów pojawia się jako 1,1M. Pliki mniejsze niż 1024 są wyświetlane w bajtach.

Lekensteyn
źródło
1
faktycznie -d wyświetla katalogi zamiast wpisów.
H2ONaCl,
@ Broiyan Możesz przenieść lsstronę podręcznika do litery lub rozważyć to: ls /może być interpretowane jako „wyświetl wpis, /jeśli jest to plik lub zawartość katalogu, /jeśli jest to katalog”. Użycie -dusuwa ostatni warunek i zawsze spowoduje wydrukowanie wpisu zamiast zawartości katalogu. Ma to zastosowanie bez względu na to, czy ścieżka jest plikiem czy katalogiem.
Lekensteyn,
Głosowałbym za tym jeszcze raz, gdybym mógł
dps
7

Używanie symboli wieloznacznych w celu uniknięcia lsuruchamiania listy katalogów jest nieoptymalne, ponieważ uniemożliwia korzystanie z lsopcji takich jak --almost-all.

Podobnie jak sugestia Enzotiba , najprostszym sposobem na usunięcie go jest przepuszczenie go w tailcelu odcięcia pierwszego wiersza. lsWykryje jednak, że jego wyjście jest potokiem, a nie interaktywnym, i niechcianie zmieni ustawienia domyślne. Dlatego, aby był niezawodny, należy również dodać kilka opcji:

  • --color=always: pokazuj kolory
  • --hide-control-chars: drukuj ?w nazwach plików zamiast znaków sterujących, które mogłyby zepsuć dane wyjściowe konsoli

Mam skrypt ~/bin/l(możesz także użyć aliasu Bash w ~/.bash_aliases):

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

Możesz także lsdomyślnie dodać dowolne inne opcje, np --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.

Ślimak mechaniczny
źródło
Nie zadziała to jednak, jeśli prześlesz wiele nazw plików do ls.
Sparhawk
3

ls -l *

Da ci zawartość folderu „normalnie nazwanego” bez total. To może być odpowiednie dla twoich potrzeb. Niestety nie da ci dotplików z prefiksem. Jeśli użyjesz ls -l * .*, dostaniesz bałagan, ponieważ linux będzie nawigował w górę drzewa.

Uwaga: przedrostek kropki może oznaczać folder lub symbol wieloznaczny oznacza powyższy folder, więc nie pomaga w wybieraniu zwykłych plików z kropką. To wydaje się być niefortunną decyzją projektową.

H2ONaCl
źródło
1

$ ls -l [DIRECTORY] | sed 1d
(dane wyjściowe zawierają nazwy plików)

$ ls -ld [path-to-dir]/*
(dane wyjściowe zawierają ścieżki względne, ale zachowają kolory)

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

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


Uwaga:
Poniższe nie działa, jeśli masz plik o nazwie „total ....”

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

Robert Vila
źródło