Могу ли я перечислить файлы, упорядоченные по дате, добавленные в папку из инструмента командной строки, такого как ls?

10

Мне нужно создать скрипт, который показывает файлы в том же порядке, что и стандартная папка «Загрузки» в доке, упорядоченная по дате добавления, сначала самая новая. Я не могу найти вариант в ls.

Есть ли другой способ сделать это?

Рамиро Араужо
источник
Покажите это где ?
Роб
Командная строка! Я закончил тем, что написал один лайнер, который добился цели. Поскольку у меня мало репутации, я пока не могу ответить на свой вопрос, я сделаю это позже.
Рамиро Араужо
Добро пожаловать на сайт Ramiro - вы сможете в любое время ответить на свой вопрос - но для вас будет ограничено «пометить как принятый» ваш ответ. Не стесняйтесь редактировать мой ответ в соответствии с вашими потребностями или предоставить свой собственный ответ, если / когда захотите.
bmike

Ответы:

6

Более простое (более быстрое) решение:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Хосе Албан
источник
1
да, намного лучше :)
Рамиро Араужо
Может кто-нибудь подробно описать, что делает каждая из этих строк? Кроме того, может ли это решение выполняться в Терминале в виде отдельных командных строк (последовательно, одна за другой) или только внутри сценария?
EJ Мак
4

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

Итак, чтобы выгрузить дату, добавленную для всех файлов в Загрузках в произвольном порядке *, расширяемую вашей оболочкой, вы можете:

mdls -name kMDItemDateAdded ~ / Загрузки / *

Вам нужно будет собрать воедино некоторую комбинацию find и sed / awk / perl / что угодно, чтобы собрать замену, lsно, возможно, mdfind может быть вызван вашим сценарием вместо необходимости заново изобретать lsи анализировать этот вывод.

bmike
источник
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. сортирует их в обратном порядке (поскольку datetime является предварительным, сортировка выполняется по Дата и время)

Надеюсь, это поможет кому-то еще! :)

@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