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ć?


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

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.


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


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).

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.