Чи можу я перерахувати файли, упорядковані за датою, додані до папки з інструменту командного рядка, наприклад ls?


10

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

Будь-який інший спосіб це зробити?


Показати де ?
Роб

Командний рядок!. Я закінчив писати один лайнер, який робить трюк. Оскільки у мене немає великої репутації, я ще не можу відповісти на власне запитання, я зроблю це пізніше.
Раміро Арауджо

Ласкаво просимо на сайт Ramiro - ви зможете будь-коли відповісти на своє запитання - але для вас буде обмеження "позначити як прийняте" свою відповідь. Не соромтесь редагувати мою відповідь відповідно до ваших потреб або надайте власну відповідь, якщо / коли вам подобається.
bmike

Відповіді:


6

Простіше (швидше) рішення:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort

1
так, набагато краще :)
Раміро Арауджо

Чи може хтось детально розповісти, що робить кожен із цих рядків? Також, чи може це рішення виконуватись у Терміналі як окремі командні рядки (послідовно, один за одним), або лише у межах сценарію?
EJ Mak

4

Додана дата зберігається як елемент метаданих, kMDItemDateAddedі mdlsкоманда викриє дані для кожного файлу, переданого як аргумент.

Отже, щоб скинути дату, додану для всіх файлів у завантаженнях у будь-якому довільному порядку *, розширюється вашою оболонкою, ви можете:

mdls -name kMDItemDateAdded ~ / Завантаження / *

Вам потрібно буде зламати разом комбінацію знаходження та sed / awk / perl / що б не було, щоб зібрати заміну, lsале, можливо, mdfind може бути викликаний вашим сценарієм, а не потребувати винагороди lsта розбору цього виводу.


1
Так! Я знайшов це пізніше і зробив гарний лайнер, який навчив мене багато чого :) Дякую за допомогу
Раміро Араужо

2
Вставте цей один вкладиш, відредагувавши мою відповідь - поділіться знаннями!
bmike

2

Ну, як зазвичай, після написання питання я розпочинаю копати вміст метаданих у файлах і закінчую писати це:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

В основному це: 1. список усіх файлів, 2. фільтрування. і .. 3. отримує ім'я та дату, один рядок за іншим 4. об'єднує кожні два рядки в 1 рядок 5. витягує дату, час та ім'я 6. сортує їх у зворотному порядку (оскільки дата передує, вона сортується за дата, час)

Сподіваюся, це допоможе комусь іншому! :)

@bmike насправді сайт наклав мені обмеження відповідати на моє запитання лише через 8 годин після публікації мого запитання через мою відсутність репутації: D


ой, я розділив один лайнер на кілька рядків лише для наочності :)
Раміро Арауджо

1
Використовуйте ls -Aзамість того, -aщоб не потрібно grep -vдля .і ...
mfilej

0

людина лс

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).

1
ні, мені потрібна добавлена ​​дата, а не дата створена. Те саме, що папка для завантаження за замовчуванням на доці
Раміро Араужо

як додана дата не збігається з датою створення?
Джейсон

1
Jason - дата створена - це коли файл був створений, коли Safari завантажує файл з іншого комп'ютера, він був чітко створений для цього завантаження або міг бути створений місяцями або роками до того, як завантаження відбудеться. Дивіться мою відповідь для детальної інформації про те, де ці дані зберігаються в OS X.
bmike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.