atr*_*lla 103 unix bash ls sorting
我想使用该ls命令先显示目录,然后显示文件。我试过:
ls -la | sort -k 1
Run Code Online (Sandbox Code Playgroud)
但我收到了错误的订单。
jon*_*ini 233
我非常喜欢 *nix 并且喜欢看到其中一些回复中的创造性......
我的在 GNU Linux 上并不那么花哨:
alias ls='ls --color -h --group-directories-first'
Run Code Online (Sandbox Code Playgroud)
鉴于我对我的 linux CLI 应用程序更满意,我也倾向于更新 OSX 上的 coreutils :
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
Run Code Online (Sandbox Code Playgroud)
ele*_*n81 33
以下命令将首先列出目录,然后是普通文件,然后是链接。
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
此外,为该命令创建别名以保存击键也很有意义。
编辑:
如果您首先需要目录,然后是不是目录的所有内容,请使用以下命令:
ls -la | grep "^d" && ls -la | grep -v "^d"
Vad*_*rov 22
对于 mac 用户,您可以安装coreutils。
这个公式提供了 GNU 核心实用程序的实现,对于 macOS 也提供的命令,它们已经安装了“g”前缀。
brew install coreutils
gls --color -h --group-directories-first
Run Code Online (Sandbox Code Playgroud)
您可以使用别名进一步简化您的生活
alias ls='gls --color -h --group-directories-first'
Run Code Online (Sandbox Code Playgroud)
我想在目录列表中看到某些内容,到目前为止,这里的答案都没有满足以下所有要求。我对目录列表的要求:
./和../)、文件和链接的总数--group-directories-firstWindows 版 Git Bash 这样方便的选项不起作用经过大量的黑客攻击,我终于想出了一个令我满意的单行(尽管很长;-))。我已将此分配给名为“dir”的别名:
ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" |
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" |
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . |
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)
Run Code Online (Sandbox Code Playgroud)
为了使事情更容易管理,我想出了单独的命令来根据我的喜好输出目录列表的每个部分,然后使用&&运算符将它们组合在一起。
ls -dlF --color * .* | head -n2- 提取./和../。我们不想传递这些,sort因为它们已经按正确的顺序排列,对它们进行排序可能会导致../首先列出。该-d选项是摆脱“总”线; 我喜欢添加-F以显示目录的尾部斜杠(当您执行普通操作时,它还会用“@”标记符号链接ls -F)。
ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df-- 提取目录并按文件名(第 9 列)对它们进行排序,忽略非字母/空格字符(d选项)和字符大小写(f选项)。该ls -A选项将./和../从列表中排除,因为我们已经在上一步中提取了它们。我倾向于在 allgrep和sort命令前面加上LC_ALL=Clocale reset 以便 (1) 输出在 Unix shell 中保持一致,并且 (2) 您有时可以看到更快的性能,因为它不再有繁重的 UTF-8 字符集的开销处理。
ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df -- 这与上面的步骤类似,但这次我们对文件和符号链接进行排序。
find -maxdepth 1 -type d ! -name . | wc -l-- 获取目录数,不包括./和../。
find -maxdepth 1 -type f | wc -l -- 获取文件数量。
find -maxdepth 1 -type l | wc -l -- 获取符号链接的数量。
du -hs | cut -f 1 -- 以人类可读的格式提取所有子目录的总大小。
find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1 -- 以人类可读的格式提取所有文件的总大小。
让我们看看我们的新dir别名的作用!
前:
$ ls -alF
total 22
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
Run Code Online (Sandbox Code Playgroud)
后:
$ dir
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
5 Dir(s) 2.8M 6 File(s) 31K 0 Link(s)
Run Code Online (Sandbox Code Playgroud)
一个小缺点是不能有彩色列表,因为文件名周围的颜色控制字符使排序太不可靠。
更新
从深层文件系统的根目录执行时,上面的别名非常缓慢,因此我已更新为这个更简单但性能更高的命令:
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
Run Code Online (Sandbox Code Playgroud)
示例输出:
$ dir
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom 0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom 0 Jun 16 2016 temp/
drwxr-xr-x 1 Tom 0 Jul 13 2016 vimfiles/
-rw-r--r-- 2 Tom 365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom 2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom 2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom 1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom 8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom 2444 Jul 13 2016 _vimrc
33819 bytes
Run Code Online (Sandbox Code Playgroud)
由于 Windows 版 Git Bash 的新版本支持--group-directories-first,我们不再需要依赖sort. 尽管新别名显示的信息不如以前的别名多,但性能提升还是值得的。作为福利,您还可以获得颜色!
您有多种选择,这取决于您是否想保持字母顺序。
你可以简单地尝试:
ls -al | 排序 -k1 -r
或者,为了保持具有相同权限的文件的字母顺序:
ls -al | 排序 -k1,1 -k9,9 -r
或者,正如 1181 所说(但此版本列出了所有内容):
ls -la | grep "^d" && ls -la | grep "^-" && ls -al | grep -v "^[d|-]"
对于delerious010 的回答,如果您想要旧式排序,我会补充说:
LANG=C ls -la --group-directories-first
Run Code Online (Sandbox Code Playgroud)
(或使用 LC_ALL 或 LANGUAGE 或 LC_COLLATE 设置为“C”)。
这将给出类似于:
.
..
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file
Run Code Online (Sandbox Code Playgroud)
虽然,如果我没记错的话,隐藏的点文件最初出现在目录之前。
| 归档时间: |
|
| 查看次数: |
100156 次 |
| 最近记录: |