Bagaimana saya bisa membuat ls
perintah di Max OS X Lion mengurutkan file dan direktori mirip dengan bagaimana Ubuntu Linux (case-insensitive, direktori TIDAK di atas, file dot TIDAK di atas)? Idealnya saya ingin melakukan ini tanpa mengirim output ke perintah lain seperti sort.
Misalnya, saya ingin melihat:
foo
Foobar
MyStuff/
.stuff/
test.txt
dari pada:
.stuff
Foobar
MyStuff/
foo
test.txt
Di Linux, ls
pengurutan urutan dikendalikan oleh lokal sistem, khususnya LC_COLLATE
. Kapan LC_COLLATE=en_US.UTF-8
, ls akan mengurutkan item seperti yang saya inginkan. Kapan LC_COLLATE=C
, ls
akan mengurutkan mirip dengan OS X.
LC_COLLATE
diatur ke en_US.UTF-8
dalam OS X, tetapi ls
masih menyortir dengan POSIX
cara lama . Adakah yang tahu bagaimana saya bisa membuat ini berperilaku lebih seperti Linux?
Jawaban:
Itu tidak mungkin:
Sumber: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
JAWABAN ASLI
Perintah ini tidak mengurutkan file dot, tetapi menunjukkan daftar direktori tambahan
Saya mendekati ini:
sumber
Saya tahu ini telah dijawab tetapi ini bekerja paling baik untuk saya:
Ini mencantumkan semua detail dan mengurutkannya dengan mengabaikan case.
sumber
Ini telah mengganggu saya untuk sementara waktu sekarang, dan akhirnya saya bereskan (heh). Setelah mencoba banyak saran yang tidak berhasil, inilah yang berhasil.
Jika Anda ingin menginstal MacPorts (atau Homebrew, atau Fink), versi ls GNU melakukan apa yang Anda inginkan. Saya menggunakan MacPorts sendiri, jadi itulah pendekatan yang akan saya jelaskan:
Unduh dan pasang MacPorts:
http://www.macports.org
Instal paket GNU Coreutils:
sudo port install coreutils
Anda sekarang harus memiliki GNU ls:
gls
. Cobalah di direktori yang berisi item yang dimulai dengan huruf besar dan kecil:gls -U
(
-U
Opsi ini sebenarnya berarti "tidak disortir", tetapi pada OS X yang memiliki efek yang diinginkan membuatnya tidak sensitif huruf.)Tambahkan alias ini di Anda
.bash_profile
sehingga regulerls
akan bekerja seperti yang Anda inginkan (saya suka keluaran warna, tetapi Anda dapat menghilangkannya jika Anda mau; Anda hanya perlu-U
):alias ls='gls -U --color'
Perhatikan bahwa
-U
opsi ini mungkin tidak akan berfungsi pada platform lain. Pada OS X, sepertinya selalu melakukan hal yang benar (mungkin karena HFS + secara efektif case-insensitive - "case-aware", secara teknis), tetapi jika Anda mencobanya pada kotak Linux, hasilnya kemungkinan besar tidak akan diurutkan sama sekali.sumber
Menambah apa yang Mike tulis di atas, saya telah mengambilnya sedikit lebih jauh dan menemukan cara untuk mendefinisikan aturan pemeriksaan Anda sendiri.
Definisi lokal terletak di / usr / share / locale /. Setiap folder adalah lokal dan memiliki file (atau tautan) LC_COLLATE, yang mendefinisikan simbol mana yang "sama" (misalnya, bahwa U, u dan ü harus dianggap sama ketika memesan). Anda dapat menduplikasi direktori dan ini akan membuat definisi lokal baru:
Sekarang Anda akan memiliki lokal baru yang disebut 'en_GB.UTF-8-CI' ('CI' untuk case-sensitive) dan Anda dapat menggunakan LC_COLLATE dari sana.
Sekarang, untuk mengubah LC_COLLATE di lokal baru Anda dapat mengunduh sumber-sumber lokal dari http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , edit satu itulah yang paling dekat dengan apa yang Anda inginkan dan jalankan
dan sekarang saat Anda berlari
Anda harus menyortir sesuai aturan Anda .
Ya, inilah yang diperlukan untuk membuat 'ls' semacam tidak sensitif huruf.
sumber
Sebagai solusinya, Anda dapat menggunakan fungsi dan alias:
Ini menghasilkan case yang diurutkan secara tidak sensitif keluaran untuk perintah ls standar.
sumber
Menggunakan
bekerja untukku.
-f secara resmi mematikan penyortiran apa pun, tetapi sepertinya jenis HFS asli bersinar, yang merupakan jenis case-insensitive.
Saya kira, itu benar-benar tergantung pada apakah Anda memiliki case-sensitive HD yang diformat atau tidak, tetapi karena format HFS case-INsensitive adalah default untuk disk sistem Mac OS X, ini seharusnya bekerja untuk sebagian besar pengguna.
sumber
Terinspirasi oleh jawaban Mike, saya menambahkan yang berikut ke / etc / bashrc, dan itu berfungsi dengan baik di Mojave. Ini daftar file tersembunyi di akhir ketika -a ditambahkan, tapi itu tidak mengganggu saya.
Anda dapat melihat konfigurasi baru dengan menjalankan perintah lokal. Untuk kembali, cukup hapus baris dari / etc / bashrc dan masuk kembali ke terminal.
Perhatikan bahwa baik ls-f1 maupun ls -f tidak bekerja untuk saya di Mojave. Saya berakhir dengan daftar yang benar-benar tidak disortir. Hanya solusi yang saya berikan yang bekerja untuk saya di Mojave.
sumber
.bashrc
atau.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Menjalankan:
Anda mungkin akan menemukan bahwa
ls
perintah Anda adalah alias.sumber
ls is /bin/ls
. Pada OS X:ls is hashed (/bin/ls)
. Either way, bahkan jika saya menelepon/bin/ls
langsung masih tidak mengurutkan menurut LC_COLLATE.ls
perintah Anda alias dimasukkan--group-directories-first
. Mungkin masih dilakukan di tempat lain, hanya saja bukan alias.Jika Anda terutama mementingkan urutan sortir file dot, Anda dapat mengurutkan berdasarkan ekstensi : Gunakan
ls
perintah dari GNU Fileutils dengan opsi--sort=extension
. (Anda dapat menginstal GNU Fileutils misalnya melalui macports.)sumber
ls sedang mengurutkan berdasarkan LC_COLLATE, hanya saja sebagian besar file LC_COLLATE diatur untuk melakukan penyortiran peka huruf besar-kecil. http://collation-charts.org/fbsd54/
Ada dua yang ditetapkan untuk penyortiran case sensitif: cs_CZ.ISO8859-2 dan et_EE.ISO8859-15 et_EE.ISO8859.15 tidak mengurutkan "Z" seperti yang diinginkan oleh penutur bahasa Inggris. cs.CZ.ISO8859-15 melakukan pekerjaan yang baik dengan alfabet, saya hanya berharap itu akan mengurutkan "~" sebelum karakter alfabet.
Solusi saya adalah: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Saya ingin tahu apakah file LC_COLLATE khusus dapat dibuat untuk menangani "." seperti yang Anda inginkan dan "~" seperti yang saya inginkan.
sumber