Linux ls показывает только дату и размер файла


72

Как я могу использовать lsв Linux, чтобы получить список имен файлов только по дате и размеру. Мне не нужно видеть другую информацию, такую ​​как владелец или разрешение. Это возможно?


1
lsэто здорово, потому что он имеет очень быструю сортировку по дате и времени, но с форматированием трудно справиться. Я предлагаю использовать токен в стиле -time, например, --time-style='+&%Y%m%d+%H%M%S.%N'где токен - «&», используя его в качестве ссылки, чтобы вы могли дополнительно проанализировать вывод, sedчтобы вы могли также вернуться назад, как раз перед тем, как токен станет размером! Если кто-то захочет опубликовать это как полный ответ, не стесняйтесь, я сейчас слишком сплю :)
Aquarius Power

Ответы:


98

Почему бы не использовать statвместо ls?

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

1
Это хорошо, но потенциально имеет проблему «слишком большая среда» / «список аргументов слишком длинный».
Мат

4
:-) Просто доказательство концепции. В реальной жизни [тм] это будетfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Чтобы отформатировать вывод stat, вы можете добавить информацию о ширине в строку формата, например "%y %8s %n", функцию C printf, например , она не документирована, но, кажется, работает (coreutils 8.17, Fedora 18)
LiuYan 研 研

Потому что с помощью lsя могу вывести его с тысячным разделителем символов. Как это работает stat?
Аль Банди

Я не понимаю, как это отвечает на вопрос ?! Это отличное нестандартное решение, но вы потеряете все преимущества ls. Как насчет цветов?
MS Berends

30

Вы можете получить большой контроль над списком файлов с помощью findутилиты. lsна самом деле не позволяет вам указать столбцы, которые вы хотите.

Например:

$ 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

Аргумент к printfдействию подробно описан на странице руководства. Вы можете выбрать другую информацию о времени, какой размер вы хотите (размер файла или используемые дисковые блоки) и т. Д. Вы также можете сделать это безопасным для необычных имен файлов, если требуется дальнейшая обработка.


1
Над вводом для поиска («% CY% Cm% Cd.% C ...») указывается длинный. По крайней мере, GNU find имеет %C+(вывод «2016-08-29 + 10: 57: 56.9201257840») и %Cc(вывод «Mo 29 Aug 2016 10:57:56 CEST»)
guettli

Жаль, что это не работает на Mac.
Джеринов

прекрасно, и если вы хотите напечатать только полный путь и размер, это должно работать "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Вы всегда можете использовать другую утилиту, например, awkдля форматирования вывода ls1 :

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


1. Да, как правило, вы не должны анализировать вывод ls, но в этом случае вопрос специально требует его ...


Это не печатает размер файла, хотя. И он печатает только первую часть имен файлов с пробелами в них. И он может потерпеть неудачу, если lsпсевдоним (скажем alias ls='ls -i'). Вы действительно должны быть очень осторожны, если хотите разобрать вывод ls.
Мат

У меня там был размер файла, а затем отредактировал его (смутный момент) - я восстановлю его. И я согласен со всеми предостережениями по поводу повторного разбора ls, но это то, чего хотел ОП ...
jasonwryan

Я не согласен, OP хочет имена файлов, а не первую часть имен файлов, если имя файла имеет пробел. (Использование /bin/lsпозволит избежать проблемы псевдонимов.)
Мат

Это подразумевается неявно : то, что указано явно, это то, что OP хочет решение, с lsкоторым мы оба согласны, не будет удовлетворять требованию пробела. /bin/lsПредложение является хорошим один.
Джейсонвриан

люблю это решение; Что касается предыдущих комментариев о том, что не нужно печатать, вы можете получить размер с помощью ls и использовать его, -hчтобы сделать его читаемым человеком. Конкретно я использовал: ls -lah | awk '{print $5,$6,$7,$8}'что дает: 4.0K Jan 24 18:17. Конечно, оригинальное решение ничего не говорит о awk, но в linux мы должны предполагать, что вывод процесса всегда будет входом для другого процесса, верно? ;)
abgordon

5

Вы также можете использовать команду «дата». Он очень прост в использовании:

date -r [имя файла]


Хорошо, это было ново для меня. К сожалению, он не работает для нескольких файлов с помощью globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Если вы хотите использовать ls, но сохранить правильный размер, вы можете использовать:

ls -Ss1pq --block-size=1

1

где пробел определен как разделитель, а f6 означает поле 6

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

2
он потерпел неудачу, потому что ls использует пробелы для отступа, а иногда это -f6-, иногда это -f5-
Водолей Power

1

Вы можете передать две команды

ls -l|cut -d" " -f5

1
он потерпел неудачу, потому что ls использует пробелы для отступа, а иногда это -f6-, иногда это -f5-
Водолей Power

-1

ls -s1 возвращает размер и имя файла только в AIX, не уверен в Linux


2
Можете ли вы объяснить, как / почему вы считаете, что это отвечает на вопрос?
Скотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.