有 GNU 吗?

有 GNU 吗?

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

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

答案1

有 GNU 吗?

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

没有GNU?

在没有 gnu 的系统上ls,最好的选择是find使用-maxdepth n/-mindepth n-type t适当的选项连续调用两次。

find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d

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

#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"

小心!

如果您计划一起使用它们 - 也就是说,从find或收集列表ls(可能通过使用xargs)并将其传递给cp(或cp包装器),您应该知道什么危险在于解析文件列表(基本上,文件名可以包含换行符之类的字符,这些字符可能会弄乱您的脚本)。具体来说,查看find's-exec-print0options 以及xargs's-0选项。

用于高效复制目录树的替代工具。

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

答案2

效劳于巴什桀骜

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

# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'

另外,如果你有 ZSH,你可以使用“k”公用事业

k -h --group-directories-first

在此输入图像描述

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

antigen bundle reduxionist/k --branch=add-sort-options

答案3

首先列出非 GNU 的目录ls

ls -l | sort

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

答案4

我的版本带有彩色文件夹和文件名,基于 @clarkttfu 的解决方案并进行了一系列改进。在 MacOS 上测试。

ls -lh | sort -r | awk 'NF==9 { if ($1~/^d/) { printf $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6 " " $7 "/" $8 " " "\033[1;34m" $9 "\033[0m" "\n" } else { printf $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6 " " $7 "/" $8 " " "\033[1;32m" $9 "\033[0m" "\n" } }' | column -t -s"/"

或创建一个别名:

alias ll='ls -lh | sort -r | awk '\''NF==9 { if ($1~/^d/) { printf $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6 " " $7 "/" $8 " " "\033[1;34m" $9 "\033[0m" "\n" } else { printf $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6 " " $7 "/" $8 " " "\033[1;32m" $9 "\033[0m" "\n" } }'\'' | column -t -s"/"'

在此输入图像描述

相关内容