Мне нужно создать скрипт, который показывает файлы в том же порядке, что и стандартная папка «Загрузки» в доке, упорядоченная по дате добавления, сначала самая новая. Я не могу найти вариант в ls
.
Есть ли другой способ сделать это?
Мне нужно создать скрипт, который показывает файлы в том же порядке, что и стандартная папка «Загрузки» в доке, упорядоченная по дате добавления, сначала самая новая. Я не могу найти вариант в ls
.
Есть ли другой способ сделать это?
Ответы:
Более простое (более быстрое) решение:
mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Добавленная дата сохраняется как элемент метаданных, kMDItemDateAdded
и mdls
команда будет предоставлять данные для каждого файла, переданного в качестве аргумента.
Итак, чтобы выгрузить дату, добавленную для всех файлов в Загрузках в произвольном порядке *, расширяемую вашей оболочкой, вы можете:
mdls -name kMDItemDateAdded ~ / Загрузки / *
Вам нужно будет собрать воедино некоторую комбинацию find и sed / awk / perl / что угодно, чтобы собрать замену, ls
но, возможно, mdfind может быть вызван вашим сценарием вместо необходимости заново изобретать ls
и анализировать этот вывод.
Ну, как обычно, после написания вопроса я начинаю копаться в содержимом метаданных в файлах и в итоге пишу так:
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
ls -A
вместо того, -a
чтобы вам не нужно grep -v
для .
и ..
.
человек лс
-U Use time of file creation, instead of last modification for sorting (-t) or long output (-l).