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.