--group-directories-first用于“ ls”命令


13

我同时使用Ubuntu 16.04和OSX。

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

这是我bashrc中的别名,但是--group-directories-first在我用Homebrew升级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

Answers:


12

安装coreutils有自制和别名llgls -Flh --group-directories-first代替。

  • brew install coreutils 如果未安装GNU Coreutils,则将其安装。
  • alias ll='gls -Flh --group-directories-first'在中使用.bashrc
    (如果要.bashrc在两个操作系统中使用相同的文件,请参见下文。)

在Ubuntu中,ls Ubuntu始终提供的GNU Coreutils提供。这就是为什么在Ubuntu中ls支持--group-directories-first。也许您之前也曾ls在macOS上使用过GNU Coreutils版本,Homebrew可以作为原版安装,gls但可以通过ls多种方式使用。

ls是外部命令,不是内置的Bash。使用其他版本或版本的Bash不会影响它。我不确定使用Homebrew升级Bash时会发生什么。也许不仅仅是Bash升级了;也许您在ls替换的全局配置文件中定义了shell函数或别名;也许您有一个ls指向gls并被覆盖的符号链接;也许您仍然有类似的东西,但是您$PATH已经改变了。无论发生什么情况, GNU Coreutils都ls支持--group-directories-first,并切换到它(我相信 bmike建议)可以解决您的问题。

如果出于某种原因要.bashrc在两个系统中使用完全相同的文件,则有几种可能的方法。您可以gls在Ubuntu系统中创建符号链接,包装器脚本,shell函数或(因为Bash别名扩展是非递归的)shell别名。但我建议,而不是正在使用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
我想在你的最后一节“或者,如果你发现你通常喜欢跑......”,条件需要被改为: "$OSTYPE" != linux-gnu ,因为你想别名LSGLS,如果你不是一个Linux的GNU系统上(如您使用的是Mac)。
soroushjp

1
@soroushjp谢谢,您是对的。(我已解决问题;对不起,等待!)
Eliah Kagan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.