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" *
f4m8
источник
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, но в этом случае вопрос специально требует его ...

jasonwryan
источник
Это не печатает размер файла, хотя. И он печатает только первую часть имен файлов с пробелами в них. И он может потерпеть неудачу, если 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-
zzapper
источник
2
он потерпел неудачу, потому что ls использует пробелы для отступа, а иногда это -f6-, иногда это -f5-
Водолей Power
1

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

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

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

cacflyer
источник
2
Можете ли вы объяснить, как / почему вы считаете, что это отвечает на вопрос?
Скотт