Bisakah saya daftar file yang dipesan berdasarkan tanggal ditambahkan ke folder dari alat baris perintah seperti ls?

10

Saya perlu membuat skrip yang menampilkan file dalam urutan yang sama dengan folder Unduhan default di dok, dipesan dengan Tanggal Ditambahkan, terbaru terlebih dahulu. Sepertinya saya tidak dapat menemukan opsi di ls.

Adakah cara lain untuk melakukannya?

Ramiro Araujo
sumber
Tampilkan di mana ?
Rob
Baris perintah!. Ayo! Saya akhirnya menulis satu liner yang melakukan trik. Karena saya tidak punya banyak reputasi, saya belum bisa menjawab pertanyaan saya sendiri, saya akan melakukannya nanti.
Ramiro Araujo
Selamat datang di situs Ramiro - Anda harus dapat menjawab pertanyaan Anda sendiri kapan saja - tetapi akan ada batasan bagi Anda untuk "menandai sebagai menerima" jawaban Anda. Jangan ragu untuk mengedit jawaban saya sesuai dengan kebutuhan Anda atau memberikan jawaban Anda sendiri jika / ketika Anda suka.
bmike

Jawaban:

6

Solusi yang lebih sederhana (Lebih cepat):

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Jose Alban
sumber
1
ya, jauh lebih baik :)
Ramiro Araujo
Bisakah seseorang merinci apa yang dilakukan masing-masing garis itu? Juga, dapatkah solusi ini dilakukan di Terminal sebagai baris perintah individual (secara berurutan, satu demi satu), atau hanya di dalam skrip?
EJ Mak
4

Tanggal yang ditambahkan disimpan sebagai item metadata kMDItemDateAddeddan mdlsperintah akan memaparkan data untuk setiap file yang diteruskan sebagai argumen.

Jadi, untuk membuang tanggal yang ditambahkan untuk semua file di Unduhan dalam urutan apa pun * yang diperluas oleh shell Anda, Anda dapat:

mdls -name kMDItemDateAdded ~ / Downloads / *

Anda harus meretas bersama beberapa kombinasi find dan sed / awk / perl / apa pun untuk merakit pengganti lstetapi mungkin mdfind dapat dipanggil oleh skrip Anda daripada perlu menemukan kembali lsdan mem-parsing output itu.

bmike
sumber
1
Iya! Saya menemukannya kemudian dan membuat satu liner yang indah yang mengajari saya banyak hal :) Terima kasih atas bantuannya
Ramiro Araujo
2
Tempelkan satu liner itu dengan mengedit jawaban saya - bagikan pengetahuan!
bmike
2

Nah, seperti biasa, setelah menulis pertanyaan saya mulai menggali konten metadata dalam file, dan akhirnya menulis ini:

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

Pada dasarnya: 1. daftar semua file 2. disaring. dan .. 3. mendapatkan nama dan tanggal ditambahkan, satu baris demi 4. 4. menggabungkan setiap dua baris menjadi 1 baris 5. mengekstrak tanggal, waktu dan nama 6. mengurutkannya secara terbalik (karena datetime dimuka, itu mengurutkan berdasarkan tanggal Waktu)

Semoga ini bisa membantu orang lain! :)

@bmike sebenarnya, situs memberlakukan batasan untuk menjawab pertanyaan saya sendiri hanya setelah 8 jam memposting pertanyaan saya, karena kurangnya reputasi saya: D

Ramiro Araujo
sumber
oh, saya membagi satu liner menjadi beberapa baris hanya untuk kejelasan :)
Ramiro Araujo
1
Gunakan ls -Aalih-alih -aagar Anda tidak perlu grep -vuntuk .dan ...
mfilej
0

man ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).
Jason
sumber
1
tidak, saya perlu tanggal ditambahkan, bukan tanggal dibuat. Sama seperti folder unduhan default di dok
Ramiro Araujo
bagaimana tanggal ditambahkan tidak sama dengan tanggal yang dibuat?
Jason
1
Jason - date dibuat adalah ketika file dibuat jadi ketika Safari mengunduh file dari komputer lain, itu jelas dibuat untuk unduhan itu atau bisa dibuat berbulan-bulan atau bertahun-tahun sebelum unduhan terjadi. Lihat jawaban saya untuk perincian di mana data ini disimpan di OS X.
bmike