Linux повинен показувати лише дату та розмір імені файлу


71

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


1
lsчудово, тому що він має дуже швидке сортування за датою, але з форматуванням важко впоратися. Я пропоную використовувати маркер у стилі --time, як, наприклад, --time-style='+&%Y%m%d+%H%M%S.%N'де маркер "&", використовуючи це в якості посилання, ви можете додатково проаналізувати результат, sedщоб ви могли також відслідковувати, як тільки розмір маркера! Якщо хтось хоче опублікувати це як повну відповідь, не соромтеся, я зараз занадто сплю :)
Водолій Сила

Відповіді:


98

Чому б не використовувати statзамість ls?

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

1
Це добре, але проблема з "занадто великим середовищем" / "аргументом занадто довгим" є потенційно.
Мат

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

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

Тому що за допомогою lsя можу вивести його за допомогою тисячі розділових знаків. Як це працює stat?
Al Bundy

Я не бачу, як це відповідає на питання ?! Це приємне рішення, але ви втратите всі переваги ls. Що з кольорами ??
MS Berends

29

Ви можете отримати багато контролю над тим, як ви перераховуєте файли за допомогою 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дії є детальним на сторінці сторінки. Ви можете вибрати різні відомості про час, який розмір ви хочете (розмір файлу або використовувані блоки диска) тощо. Ви також можете зробити це безпечним для незвичних імен файлів, якщо потрібна подальша обробка.


Вище введення для пошуку ('% CY% Cm% Cd.% C ...') довге. Принаймні GNU find має %C+(вихід "2016-08-29 + 10: 57: 56.9201257840") та %Cc(вихід "Пн 29 серпня 2016 10:57:56 CEST")
guettli

Бажаю, щоб це працювало на Mac.
Джеріна

прекрасно, і якщо ви хочете надрукувати лише повний шлях та розмір, це має спрацювати "знайти / шлях / до / -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, але це те, чого хотіла ОП ...
Jasonwryan

Я не погоджуюсь, що ОП хоче назви файлів, а не першої частини імен файлів, якщо ім'я файлу має пробіл. (Використання дозволило /bin/lsб уникнути проблем псевдоніма.)
Мат

Це розуміється неявно : те, що прямо сказано, полягає в тому, що ОП хоче рішення, з lsяким ми обидва погоджуємось, не задовольнятиме вимогу пробілу. /bin/lsПропозиція є хорошим один.
Jasonwryan

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

5

Ви також можете скористатися командою 'date'. Це дуже просто у використанні:

дата -r [ім'я файлу]


Приємно, це було для мене новим. На жаль, він не працює для декількох файлів через глобус: 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-
Водолій Сила

1

Ви можете скласти дві команди

ls -l|cut -d" " -f5

1
це не вдалося, оскільки ls використовує пробіли для відступу, а іноді це -f6- інший раз це -f5-
Водолій Сила

-1

ls -s1 повертає розмір і ім'я файлу лише в AIX, не впевнений у Linux


2
Чи можете ви пояснити, як / чому ви вважаєте, що це відповідає на питання?
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.