--group-directories-first option untuk perintah "ls"

13

Saya menggunakan Ubuntu 16.04 dan OS X.

alias ll='ls -Flh --group-directories-first'

Ini adalah alias di bashrc saya, tetapi entah bagaimana --group-directories-firstopsi menjadi ilegal di OS X setelah saya memutakhirkan bash saya dengan Homebrew. Di desktop Ubuntu saya, saya masih bisa menggunakan opsi itu.

Dalam versi Bash apa, opsi ini tidak didukung? Versi Bash di mesin OS X saya mengatakanGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Saya ingin menggunakan --group-directories-firstopsi lagi. Apakah ada cara untuk mencapainya?

IzumiSy
sumber
1
Apakah Anda menggunakan gnu correutils lsatau macOS ls? Sudahkah Anda mencoba yang lain?
bmike

Jawaban:

12

Instal coreutilsdengan Homebrew dan alias lluntuk gls -Flh --group-directories-firstgantinya.

  • brew install coreutils menginstal GNU Coreutils , kalau-kalau tidak diinstal.
  • Gunakan alias ll='gls -Flh --group-directories-first'dalam .bashrc.
    (Jika Anda ingin menggunakan .bashrcfile yang sama di kedua sistem operasi, lihat di bawah.)

Di Ubuntu, lsdisediakan oleh GNU Coreutils , yang selalu dimiliki Ubuntu. Itu sebabnya lsmendukung --group-directories-firstdi Ubuntu. Mungkin Anda pernah menggunakan versi GNU Coreutils lspada macOS sebelumnya, yang diinstal Homebrew glstetapi dapat digunakan seperti lsdalam beberapa cara.

lsadalah perintah eksternal, bukan Bash builtin. Menggunakan versi atau versi Bash yang berbeda seharusnya tidak memengaruhinya. Saya tidak yakin apa yang terjadi ketika Anda memutakhirkan Bash menggunakan Homebrew. Mungkin lebih dari Bash juga ditingkatkan; mungkin Anda memilikilsfungsi shell atau alias yang ditentukan dalam file konfigurasi global yang diganti; mungkin Anda memiliki tautan simbolislsyang telah menunjukglsdan ditimpa; mungkin Anda masih memiliki sesuatu seperti itu tetapi Anda$PATHtelah berubah. Apa pun yang terjadi, GNU Coreutils lsmendukung--group-directories-first , dan beralih ke sana (seperti yang saya sarankan bmike ) harus memperbaiki masalah Anda.

Jika karena alasan tertentu Anda ingin menggunakan .bashrcfile yang sama persis di kedua sistem, ada beberapa pendekatan yang mungkin. Anda dapat membuat symlink, skrip wrapper, fungsi shell, atau (karena ekspansi Bash adalah non-rekursif) untuk alias glsdi sistem Ubuntu Anda. Tapi saya sarankan bukan pengecekan yang OS sedang digunakan dalam .bashrc. Meskipun Anda akan mendapatkan llalias berbeda yang didefinisikan dalam setiap sistem, pendekatan ini memiliki manfaat mendokumentasikan diri. Anda .bashrcakan masuk akal untuk Anda dalam setahun, atau sebulan.

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ll='ls -Flh --group-directories-first'
else
    alias ll='gls -Flh --group-directories-first'
fi

Atau jika Anda biasanya lebih suka menjalankan Coreutils ls, bahkan jika Anda tidak menggunakan llalias, Anda bisa membuat lsalias untuk gls:

if [ "$OSTYPE" != linux-gnu ]; then  # Is this the macOS system?
    alias ls=gls
fi

alias ll='ls -Flh --group-directories-first'

(Terima kasih pergi ke soroushjp untuk menangkap kesalahan dalam versi sebelumnya dari skrip itu.)

Eliah Kagan
sumber
Saya mengikuti jawaban ini dan menggunakan: alias ls = 'gls --color -h --group-directories-first' alias ll = 'ls -al'
user2875289
1
Saya pikir di bagian terakhir Anda "Atau jika Anda menemukan Anda biasanya lebih suka menjalankan ..." , kondisi perlu diubah menjadi :,"$OSTYPE" != linux-gnu karena Anda ingin alias ls to gls jika Anda tidak menggunakan sistem GNU Linux (mis. Anda menggunakan Mac).
soroushjp
1
@soroushjp Terima kasih - Anda benar. (Saya sudah memperbaikinya; maaf soal menunggu!)
Eliah Kagan