Qual é a maneira mais fácil de remover a linha “size total” da saída de ls -l?

12

O melhor que consegui encontrar via Google / man ls foi:

ls -l | grep -v '^total'

Há algo que estou perdendo nas bandeiras para ls ?

Além disso, por que o tamanho total é em kb, independentemente do sinalizador -h? , o que, como parece, não tem certeza do que eu estava vendo.

    
por Tom 13.09.2011 / 11:13

4 respostas

9

Examinando o código-fonte de coreutils , descobri que total sempre será exibido ao usar a opção -l nos diretórios .

O uso da opção -d para listar as entradas, em vez do conteúdo do diretório, oculta total . Mas se você executar isso sem argumentos (ou em um diretório), ele mostrará apenas o diretório e não seu conteúdo. Portanto, você precisa de curingas. * corresponde a todos os arquivos e .* corresponde também aos arquivos ocultos (o que corresponde à opção -a ):

ls -ld * .*

Quanto à opção -h , funciona para mim. 1118360 bytes aparecem como 1.1M. Arquivos menores que 1024 aparecem em bytes.

    
por Lekensteyn 13.09.2011 / 12:15
6

O uso de curingas para evitar que o ls executando a listagem de diretórios seja inferior ao ideal, pois impede o uso de ls opções como --almost-all .

Como Sugestão do Enzotib , a maneira mais simples de removê-lo é canalizá-lo através de tail para cortar a primeira linha. No entanto, ls detectará que sua saída é um canal em vez de interativa e alterará seus padrões de maneira indesejada. Assim, para torná-lo robusto, você também deve adicionar algumas opções:

  • --color=always : continue exibindo as cores
  • --hide-control-chars : print ? em nomes de arquivos no lugar de caracteres de controle que poderiam atrapalhar a saída do console

Eu tenho um script ~/bin/l (você também pode usar um alias de Bash em ~/.bash_aliases ):

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

Você também pode adicionar outras opções de ls por padrão, por exemplo, --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash .

    
por Mechanical snail 17.11.2013 / 03:38
0

ls -l *

Fornecerá o conteúdo da pasta "normalmente nomeado" sem o total . Isso pode ser adequado às suas necessidades. Infelizmente, ele não fornecerá os arquivos dot prefixados. Se você usa ls -l * .* você vai ter uma bagunça, já que o linux irá navegar pela árvore.

Observe que o prefixo de ponto pode significar a pasta ou com um caractere curinga significa a pasta acima, portanto, não ajuda a escolher arquivos regulares com prefixo de ponto. Esta parece ter sido uma decisão de projeto infeliz.

    
por H2ONaCl 21.09.2013 / 07:45
0
  

$ ls -l [DIRECTORY] | sed 1d
(a saída contém nomes de arquivos)

     

$ ls -ld [path-to-dir]/*
(a saída contém caminhos relativos, mas   preservar cores)

     

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

     

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

Nota:
O seguinte não funciona se você tiver um arquivo chamado "total ...."

  

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

    
por Robert Vila 03.03.2014 / 05:28

Tags