Elh*_*asi 42 command-line ls shell-script
我有两个问题。首先,哪个命令列出文件和目录,但首先列出目录?
第二个问题:我想将文件列表复制到单个目录中,但将目标目录设为命令中的第一个文件名。
Sha*_*off 54
gnu 版本ls
有--group-directories-first
. 并且cp
有-t
。
在没有 gnu's 的系统上ls
,最好的办法是连续两次调用find
with -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)
如果您打算一起使用这些 - 也就是说,从find
或ls
(可能通过使用xargs
)收集列表并将其传递给cp
(或cp
包装器),您应该意识到解析文件列表存在哪些危险(基本上,文件名可以包含换行符之类的字符,可能会弄乱您的脚本)。具体来说,查看find
's-exec
和-print0
options 和xargs
's-0
选项。
您可能想考虑使用rsync
;它有很多功能可以让您的工作更轻松。
Dmi*_*nov 18
适用于bash和zsh
只需在 ~/.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)
首先为非 GNU 列出目录ls
:
ls -l | sort
请注意,这将列出所有其他奇怪的东西,如符号链接、套接字和管道(当然,适当分组),但考虑到这些东西非常罕见,应该没有问题。否则过滤器将是ls -l | grep '^(-|d)' | sort
归档时间: |
|
查看次数: |
34316 次 |
最近记录: |