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?

Pinkie
fonte
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" *
f4m8
fonte
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.

Esteira
fonte
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 ...

jasonwryan
fonte
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]

Ankit Khare
fonte
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
Deep
fonte
1

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

ls -lt | cut -d" " -f6-
zzapper
fonte
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
Deepak
fonte
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

cacflyer
fonte
2
Você pode explicar como / por que você acredita que isso responde à pergunta?
21475 Scott Scott