Bagaimana cara mengubah format waktu yang digunakan oleh ls command line di osx?

27

Saya ingin membuat lswaktu tampilan dalam ISOformat (format militer). Bagaimana saya bisa mengubah perilaku ini?

Di Linux saya tahu bahwa saya bisa memaksa ls untuk menampilkan waktu dalam format panjang oleh kami, --full-timetetapi ini tidak berfungsi pada OS X.

Pembaruan: Saya tahu bahwa format yang digunakan oleh perintah didasarkan pada localepengaturan. Masalahnya adalah bahwa pada OS XI tidak dapat menggunakan trik pengaturan LC_TIME=en_DK.

Sorin
sumber
1
Jawaban yang tidak dijawab, tetapi tetap berguna: Perintah stat (1) cukup fleksibel dan dapat dibuat untuk menampilkan perangko waktu dalam format apa pun yang diinginkan.
Harald Hanche-Olsen
gls (gnu ls) yang saya sebutkan di jawaban saya dapat mengambil --style = flag di mana Anda dapat menentukan string + FORMAT, sehingga Anda dapat membuat tanggal muncul apa pun yang Anda inginkan.
barryj
Saya berharap saya tahu cara. Manual BSD Apple untuk lstampaknya tidak menawarkan apa pun untuk memformat datetimes, selain mengubah zona waktu dan mengurutkan berdasarkan datetime daripada alpha. developer.apple.com/library/mac/documentation/Darwin/Reference/…
jtheletter

Jawaban:

16

Jika Anda menginstal gnu coreutils maka gnu ls tersedia, yang akan melakukan apa yang diperlukan. Jika Anda menggunakan minuman sebagai pengelola paket, sesederhana:

brew install coreutils
gls -l --time-style=full-iso
barryj
sumber
Terima kasih, ini berguna tetapi tidak menyelesaikan masalah. Format lengkap yang digunakan masih belum ISO-8601.
Sorin
OK - Anda dapat menginstal gnu coreutils yang mencakup gnu ls, yang akan melakukan apa yang Anda inginkan. Cara termudah adalah salah satu buatan, MacPorts atau Fink. Saya menggunakan brew - jadi jalankan saja 'brew install coreutils'. Anda kemudian akan memiliki gls tersedia.
barryj
1
Khususnya, brew install coreutilsmenghasilkan /usr/local/bin/glsdiinstal, jadi Anda harus menjalankan glsbukan ls.
erik.weathers
Anda perlu menentukan format waktu dengan gls -l --time-syle="+%I"(atau apa pun gdateformat gaya yang benar untuk ISO-8601).
rubynorails
Panggilan yang benar dengan demikian; gls-l - time-style = full-iso
AnneTheAgile
13

Perintah bawaan OS X lstidak memerlukan waktu untuk memformat argumen, tetapi statperintah tersebut mengambil string format strftime sehingga Anda bisa mendapatkan perkiraan tentang apa yang Anda inginkan dengan melakukan:

stat -l -t '%FT%T' *

The %FT%Tmenghasilkan ISO8601 timestamp lokal. Tambahkan a %zjika Anda ingin offset UTC.

Tetapi sementara cap waktu tepat, sisanya hanya mendekati apa yang akan Anda dapatkan dari ls. Misalnya, ls -ldengan benar menyelaraskan bidang ke dalam kolom, dapat mewarnai keluaran, dan tentu saja mencantumkan konten direktori daripada mengharuskan Anda untuk meneruskan semua nama file sebagai argumen. Anda setidaknya dapat mereproduksi penyelarasan yang tepat dengan menyalurkan output melalui truntuk mengubah semua spasi menjadi tab:

stat -l -t '%F%T' * | tr ' ' \\t

Atau, saya pikir mungkin untuk bisa ls -lmenghasilkan cap waktu ISO8601 dengan mendefinisikan lokal kustom, tapi saya belum melihatnya selesai.

ganggang
sumber
-1

ls -l --time-style=iso bekerja dengan baik untuk saya.

Kumar
sumber
1
Tidak. Singa gunung.
Nakilon
2
Tidak di Mavericks juga.
Clay Bridges
4
Ini mungkin bekerja dengan baik untuk OP, karena dia telah menginstal non-sistem lstanpa menyadarinya, melalui manajer paket seperti minuman.
algal
1
Setuju dengan @algal. Saya telah /usr/local/bin/glsmenginstal via brew install coreutils, dan itu mendukung --time-styleopsi. OP mungkin telah berjalan brew install coreutils --with-default-namesyang akan menghasilkan /usr/local/bin/lsdiinstal (di antara utilitas lain), atau mungkin OP mengatur symlink manual gls.
erik.weathers
Apa yang Anda lihat saat masuk which ls?
mschaef