「ls」コマンドの--group-directories-firstオプション


13

Ubuntu 16.04とOS Xの両方を使用しています。

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

これは私のbashrcのエイリアスですが、--group-directories-firstHomebrewでbashをアップグレードした後、OS Xでオプションが違法になりました。私のUbuntuデスクトップでは、そのオプションを引き続き使用できます。

Bashのどのバージョンで、このオプションはサポートされていませんか?私のOS XマシンのBashバージョンは言うGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

--group-directories-firstもう一度オプションを使いたいのですが。それを達成する方法はありますか?


1
gnu correutils lsまたはmacOS を使用していますlsか?他のものを試しましたか?
bmike

回答:


12

代わりにcoreutils、Homebrewとエイリアスllgls -Flh --group-directories-first使用してインストールします。

  • brew install coreutils インストールされていない場合に備えて、GNU Coreutilsをインストールします
  • で使用alias ll='gls -Flh --group-directories-first'.bashrcます。
    .bashrc両方のオペレーティングシステムで同じファイルを使用する場合は、以下を参照してください。)

Ubuntuでは、Ubuntuが常に持っているlsGNU Coreutilsによって提供されます。それがUbuntuでlsサポートさ--group-directories-firstれている理由です。おそらくあなたlsも以前にmacOS でGNU Coreutilsバージョンを使用していました。Homebrew はそれとしてインストールされますglsls、いくつかの方法で使用可能にすることができます。

ls外部コマンドであり、Bashビルトインではありません。別のバージョンまたはビルドのBashを使用しても影響はありません。Homebrewを使用してBashをアップグレードしたときに何が起こったかはわかりません。たぶん、Bashもアップグレードされました。おそらく、ls置き換えられたグローバル構成ファイルでシェル関数またはエイリアスが定義されていました。たぶん、あなたはls指し示してgls上書きされたシンボリックリンクを持っていたかもしれません。多分あなたはまだそのようなものを持っています$PATHが、あなたは変わりました。何が起こったとしても、 GNU Coreutils lsはをサポートしており--group-directories-first、( bmikeが示唆しているように GNU Coreutilsに切り替えると問題が解決するはずです。

何らかの理由.bashrcで両方のシステムでまったく同じファイルを使用したい場合、いくつかの可能なアプローチがあります。glsUbuntuシステムで、シンボリックリンク、ラッパースクリプト、シェル関数、または(Bashエイリアス展開は再帰的ではないため)シェルエイリアスを作成できます。ただし、代わりにで使用さているOS確認することをお勧めし.bashrcます。llシステムごとに異なるエイリアスが定義されますが、この方法には自己文書化するという利点があります。あなた.bashrcは一年、または一ヶ月であなたに理にかなっています。

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

それとも、あなたが通常のCoreutilsを実行することを好む見つけた場合ls、あなたが使用していない場合でも、llエイリアスを、あなたが作ることができるlsにエイリアスをgls

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

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

(そのスクリプトの以前のバージョンの間違い見つけてくれたsoroushjpに感謝します。)


私はこの答えに従って使用します:alias ls = 'gls --color -h --group-directories-first' alias ll = 'ls -al'
user2875289

1
最後のセクション「通常は実行したい場合...」では、条件を次のように変更する必要があると 思います。LinuxGNUシステムを使用していない場合は、lsgls"$OSTYPE" != linux-gnu にエイリアスしたいためですMacを使用しています)。
soroushjp

1
@soroushjpありがとうございます。(私はそれを修正しました。待機については申し訳ありません!)
Eliah Kagan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.