find
我有一个命令传递到xargs
的结果ls -d
。当没有文件匹配时,我得到:
.
作为我的唯一输出,因为默认情况下ls -d
显示:
.
...,当没有指定(文件名)参数时。有没有办法在不传递任何参数时ls -d
省略.
,并且不显示任何输出?
更新:你只是无法说服ls -d
不显示.
:
.
ls -d -A\ # Skip implied
--hide=.\ # No, really, skip implied
--ignore=. # I mean it, damn it!
.
:)
答案1
xargs
与 一起使用find
太 1980 年代了...
致电例如:
find . -type d -exec ls -d {} +
并且 ls 命令永远不会在没有参数的情况下被调用。
find
David Korn 于 1989 年为 SVr4添加了 execplus 功能。
答案2
您标记了操作系统,所以你可能运行 GNU xargs,它有这个选项:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
对于find ... | xargs -r ls -d
,如果不匹配任何内容,则ls
根本不会启动。find
find
可能仍然.
显式匹配。为了避免这种情况,请添加! -name .
到查找表达式中。或者使用-mindepth 1
(在 GNU find 中)来防止find
匹配命令行上给出的任何路径。
(至于如何让ls
自己忽略.
,我不知道。)