Linux ls para mostrar apenas a data e o tamanho do nome do arquivo


72

Como posso usar lsno linux para obter uma lista apenas dos nomes de arquivos, data e tamanho. Não preciso ver as outras informações, como proprietário ou permissão. Isso é possível?


11
lsé excelente porque possui uma classificação muito rápida por data e hora, mas é difícil lidar com a formatação. Sugiro usar um token no estilo --time, como --time-style='+&%Y%m%d+%H%M%S.%N'onde o token é '&', usando-o como referência, você poderá analisar ainda mais a saída, sedpara que você também possa voltar atrás como antes do tamanho do token! Se alguém quiser postar isso como uma resposta completa, sinta-se à vontade para, eu estou dormindo demais agora :) #
— Aquarius Power

Respostas:


98

Por que não usar em statvez de ls?

stat -c "%y %s %n" *

11
Isso é bom, mas tem o problema "ambiente muito grande" / "lista de argumentos muito longa" potencialmente.
— Mat

4
:-) Apenas uma prova de conceito. Na vida real [tm] este será umfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
— f4m8

5
Para formatar a saída stat, você pode adicionar largura informações para a cadeia de formato como função printf C, por exemplo "%y %8s %n", não está documentada, mas parece obras (coreutils 8.17, Fedora 18)
— Liuyan刘研

Porque com lseu posso produzir com um separador de mil caracteres. Como isso funciona stat?
— Al Bundy

Não vejo como isso responde à pergunta ?! É uma solução agradável e prática, mas você perderia todos os benefícios ls. E as cores ??
— MS Berends

30

Você pode obter muito controle sobre como listar arquivos com o findutilitário. lsrealmente não permite que você especifique as colunas que deseja.

Por exemplo:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

O argumento para a printfação é detalhado na página de manual. Você pode escolher informações diferentes sobre o horário, qual o tamanho desejado (tamanho do arquivo ou blocos de disco usados), etc. Você também pode tornar isso seguro para nomes de arquivos incomuns, se for necessário um processamento adicional.


11
A entrada acima para encontrar ('% CY% Cm% Cd.% C ...') é longa. Pelo menos a descoberta GNU tem %C+(saída "2016-08-29 + 10: 57: 56.9201257840") e %Cc(saída "Mo 29 de agosto de 2016 10:57:56 CEST")
— guettli

Gostaria que isso funcionasse em macs.
— 21418 Jerinaw

adorável, e se você deseja imprimir apenas o caminho e o tamanho completos, isso deve funcionar "find / path / to / -printf '% h /% f% s \ n'" "
— Pierluigi Vernetto 28/18

24

Você sempre pode usar outro utilitário, como awkformatar a saída ls1 :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Sim, geralmente, você não deve analisar a saída de ls, mas, neste caso, a pergunta exige especificamente ...


Isso não imprime o tamanho do arquivo. E apenas imprime a primeira parte dos nomes de arquivos com espaços em branco. E pode falhar se lsestiver com alias (digamos alias ls='ls -i'). Você realmente deve tomar muito cuidado se quiser analisar a saída do ls.
— Mat

Eu tinha o tamanho do arquivo e editei (momento vago) - eu vou restaurá-lo. E eu concordo sobre todas as ressalvas está analisando ls, mas é isso que o OP queria ...
— jasonwryan

Eu discordo, o OP quer os nomes de arquivos, não a primeira parte dos nomes de arquivos, se o nome do arquivo tiver espaços em branco. (O uso /bin/lsevitaria o problema de alias.) #
— 716 mat #

Isso é entendido implicitamente : o que é afirmado explicitamente é que o OP quer uma solução com a lsqual ambos concordemos que não satisfará o requisito de espaço em branco. A /bin/lssugestão é boa.
— jasonwryan #

adoro esta solução; em relação aos comentários anteriores sobre não imprimir o tamanho, você pode obter o tamanho com ls e usá -h-lo para torná-lo legível por humanos. Especificamente eu usei: ls -lah | awk '{print $5,$6,$7,$8}'que origina: 4.0K Jan 24 18:17. É verdade que a solução original não diz nada sobre o awk, mas no linux devemos assumir que a saída de um processo sempre será a entrada para outro processo, certo? ;)
— abgordon 24/01

5

Você também pode usar o comando 'date'. É muito fácil de usar:

data -r [nome do arquivo]


Bom, isso era novo para mim. Infelizmente, ele não funciona para vários arquivos via globbing: date -r foo*.txt->date: extra operand "foo2.txt"
— guettli

4

Se você deseja usar ls, mas preservar o tamanho adequado, pode usar:

ls -Ss1pq --block-size=1

1

onde o espaço é definido como o separador e f6 significa o campo 6

ls -lt | cut -d" " -f6-

2
ele falhou porque ls usa espaços de recuo e às vezes é -f6- outras vezes é -f5-
— Aquarius Poder

1

Você pode canalizar dois comandos

ls -l|cut -d" " -f5

11
ele falhou porque ls usa espaços de recuo e às vezes é -f6- outras vezes é -f5-
— Aquarius Poder

-1

ls -s1 retorna o tamanho e o nome do arquivo apenas no AIX, não tem certeza sobre o Linux


2
Você pode explicar como / por que você acredita que isso responde à pergunta?
— 21475 Scott Scott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.