我有两个问题。首先,哪个命令列出文件和目录,但首先列出目录?
第二个问题:我想将文件列表复制到一个目录中,但是将目标目录作为命令中的第一个文件名。
-t是一个可能的仅GNU选项,cp该选项需要一个显式的目标目录,因此可以在命令行中的任何位置(包括开头)进入。
我有两个问题。首先,哪个命令列出文件和目录,但首先列出目录?
第二个问题:我想将文件列表复制到一个目录中,但是将目标目录作为命令中的第一个文件名。
-t是一个可能的仅GNU选项,cp该选项需要一个显式的目标目录,因此可以在命令行中的任何位置(包括开头)进入。
Answers:
GNU版本ls都有--group-directories-first。并且cp有-t。
在没有gnu的系统上ls,最好的选择是连续两次调用findwith -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的-exec和-print0选项以及xargs的-0选项。
您可能想研究使用rsync;它具有许多功能,可能会使您的工作更轻松。
--group-directories-first)。
ls --version以找出您拥有的那个。
首先列出非GNU的目录ls:
ls -l | sort
注意,这将列出所有其他奇怪的东西,例如符号链接,套接字和管道(当然,适当地分组),但是考虑到这些东西很少见,这应该不是问题。否则过滤器将是ls -l | grep '^(-|d)' | sort
sort -r。
对于zsh的完成列表,您可以将list-dirs-first样式设置为true,以便首先显示目录。在您的~/.zshrc:
zstyle ':completion:*' list-dirs-first true
(此处适用于支持它的所有完成窗口小部件以及所有命令;可以根据需要进行限制,请参阅zstyle文档以获取详细信息)
如果您还没有这样做,请确保同时运行compinstall以获取彩色的完成列表,说明等以及所有其他优点。
对于非GNU,awk可以过滤所有其他字段:
ls -l | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
ls -l必须包含9个字段输出看起来像,ls -1但是目录放在最前面:
node_modules/
src/
e2e/
angular.json
tslint.json
package.json
README.md
根据ls手册页的“长格式”,当涉及其他文件类型时,输出顺序应为:
s Socket link.
p FIFO.
l Symbolic link.
d Directory.
c Character special file.
b Block special file.
- Regular file.
一个方便的bash函数(将其放入您的.bash_profile或.bashrc中):
function l1() {
ls -l $* | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
}
ls有一个--group-directories-first开关。