【发布时间】:2020-11-21 06:56:53
【问题描述】:
我有以下目录:
> tree
.
├── a.txt
└── b.txt
> ls
a.txt b.txt
当我运行命令 ls | xargs echo 时,我得到以下信息:
> ls | xargs echo
a.txt b.txt
虽然我希望结果看起来像
> ls | xargs echo
a.txt
b.txt
鉴于我希望 xargs 单独处理每个文件,而 echo 将每个输入打印在单独的行上。
为什么预期与实际存在差异?
编辑1:
按照建议我已经尝试过:
find . -mindepth 1 -maxdepth 1 -exec echo {} \;
这确实按预期工作,我认为允许使用 -exec 替换其他命令以进行回显。
但是,尝试其他建议以尝试使 xargs 正常工作仍然不起作用(在同一行打印输出)。
例子:
printf "%s\n" * | xargs
a.txt b.txt
> find . -mindepth 1 -maxdepth 1 | xargs echo
./b.txt ./a.txt
【问题讨论】:
-
xargs默认情况下会在主机操作系统允许的情况下将尽可能多的参数放入它运行的程序的命令行中。如果您希望每行一个,请使用printf "%s\n" *。