如何首先列出带有目录的文件和目录

Elh*_*asi 42 command-line ls shell-script

我有两个问题。首先,哪个命令列出文件和目录,但首先列出目录?

第二个问题:我想将文件列表复制到单个目录中,但将目标目录设为命令中的第一个文件名。

Sha*_*off 54

有 GNU 吗?

gnu 版本ls--group-directories-first. 并且cp-t

没有 GNU?

在没有 gnu's 的系统上ls,最好的办法是连续两次调用findwith -maxdepth n/-mindepth n-type t适当的选项。

find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d
Run Code Online (Sandbox Code Playgroud)

对于复制文件,首先使用目标,您必须编写一个脚本来保存第一个参数,然后使用shift,并将参数附加到末尾。

#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"
Run Code Online (Sandbox Code Playgroud)

小心!

如果您打算一起使用这些 - 也就是说,从findls(可能通过使用xargs)收集列表并将其传递给cp(或cp包装器),您应该意识到解析文件列表存在哪些危险(基本上,文件名可以包含换行符之类的字符,可能会弄乱您的脚本)。具体来说,查看find's-exec-print0options 和xargs's-0选项。

一种有效复制目录树的替代工具。

您可能想考虑使用rsync;它有很多功能可以让您的工作更轻松。

  • 你可以运行 `ls --version` 来找出你拥有的是哪一个。 (3认同)

Dmi*_*nov 18

适用于bashzsh

只需在 ~/.bashrc 或 ~/.zshrc 中添加别名

# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'
Run Code Online (Sandbox Code Playgroud)

此外,如果您有 ZSH,则可以使用“k”实用程序

k -h --group-directories-first
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

只需将其与抗原一起安装,将以下内容放入 ~/.zshrc

antigen bundle reduxionist/k --branch=add-sort-options
Run Code Online (Sandbox Code Playgroud)


Ale*_*kin 9

首先为非 GNU 列出目录ls

ls -l | sort

请注意,这将列出所有其他奇怪的东西,如符号链接、套接字和管道(当然,适当分组),但考虑到这些东西非常罕见,应该没有问题。否则过滤器将是ls -l | grep '^(-|d)' | sort

  • ls -l | sort 在 Mac 上对我不起作用。它首先对目录进行分组,但没有对它们进行排序,也没有对后面的文件名进行排序。 (2认同)
  • 另请注意:使用` | sort` 将删除您的颜色,因为它现在是文本。 (2认同)