Czy mogę wyświetlić listę plików uporządkowanych według daty dodanych do folderu za pomocą narzędzia wiersza polecenia, takiego jak ls?

10

Muszę zbudować skrypt pokazujący pliki w tej samej kolejności, co domyślny folder Pobrane w doku, uporządkowany według Data dodania, najpierw najnowszy. Nie mogę znaleźć opcji w ls.

Jakiś inny sposób to zrobić?

Ramiro Araujo
źródło
Pokaż gdzie ?
Rob
Wiersz poleceń!. Skończyło się na tym, że napisałem linijkę, która załatwi sprawę. Ponieważ nie mam zbyt dobrej reputacji, nie mogę jeszcze odpowiedzieć na własne pytanie, zrobię to później.
Ramiro Araujo
Witamy na stronie Ramiro - powinieneś być w stanie odpowiedzieć na swoje pytanie w dowolnym momencie - ale będzie ograniczenie, aby „oznaczyć odpowiedź jako zaakceptowaną”. Nie wahaj się edytować mojej odpowiedzi, aby dopasować ją do twoich potrzeb, lub podaj własną odpowiedź, jeśli chcesz.
bmike

Odpowiedzi:

6

Prostsze (szybsze) rozwiązanie:

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Jose Alban
źródło
1
tak, znacznie lepiej :)
Ramiro Araujo
Czy ktoś mógłby szczegółowo opisać, co robi każda z tych linii? Czy to rozwiązanie można również wykonać w Terminalu jako pojedyncze wiersze poleceń (sekwencyjnie, jeden po drugim), czy tylko w skrypcie?
EJ Mak
4

Dodana data jest przechowywana jako element metadanych, kMDItemDateAddeda mdlspolecenie ujawni dane dla każdego pliku przekazanego jako argument.

Aby więc zrzucić datę dodaną dla wszystkich plików w Pobranych w dowolnej kolejności * rozszerzanej przez powłokę, możesz:

mdls -name kMDItemDateAdded ~ / Pobieranie / *

Będziesz musiał zhakować kilka kombinacji find i sed / awk / perl / cokolwiek, aby skompletować zamiennik, lsale być może mdfind może zostać wywołany przez skrypt, zamiast potrzeby ponownego tworzenia lsi analizowania tego wyniku.

bmike
źródło
1
Tak! Znalazłem to później i zrobiłem piękny liner, który nauczył mnie wielu rzeczy :) Dzięki za pomoc
Ramiro Araujo
2
Wklej ten jeden linijka, edytując moją odpowiedź - podziel się wiedzą!
bmike
2

Cóż, jak zwykle, po napisaniu pytania zacząłem kopać zawartość metadanych w plikach i skończyłem pisać:

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

Zasadniczo: 1. wypisz wszystkie pliki 2. odfiltruj. i .. 3. pobiera nazwę i datę dodania, jedna linia po drugiej 4. łączy co dwie linie w 1 linię 5. wyodrębnia datę, godzinę i nazwę 6. sortuje je w odwrotnym kierunku (ponieważ data i godzina są z góry, sortuje według datetime)

Mam nadzieję, że pomoże to komuś innemu! :)

@ bmike, w rzeczywistości strona narzuciła mi ograniczenie, aby odpowiedzieć na moje pytanie dopiero po 8 godzinach od opublikowania mojego pytania, z powodu braku mojej reputacji: D

Ramiro Araujo
źródło
och, podzieliłem jedną linijkę na kilka linii tylko dla jasności :)
Ramiro Araujo
1
Użyj ls -Azamiast -a, abyś nie musiał grep -vza .i ...
mfilej
0

człowiek ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).
Jason
źródło
1
nie, potrzebuję daty dodania, a nie daty utworzenia. Taki sam jak domyślny folder pobierania w stacji dokującej
Ramiro Araujo
w jaki sposób data dodania nie jest taka sama jak data utworzenia?
Jason
1
Jason - data utworzenia ma miejsce, gdy plik został utworzony, więc gdy Safari pobiera plik z innego komputera, został wyraźnie utworzony dla tego pobrania lub mógł zostać utworzony miesiące lub lata przed pobraniem. Zobacz moją odpowiedź, aby uzyskać szczegółowe informacje na temat miejsca przechowywania tych danych w systemie OS X.
bmike