当前位置: 首页>>技术教程>>正文


bash – 如何将管道输入引导至 ls 命令?

, , ,

问题描述

当我输入类似以下内容时:

find . -name *foo* | ls -lah

它返回的结果与普通的 ls 命令相同,就好像它没有输入一样。

然而:

ls -lah $( find . -name *foo* )

效果很好,但只有当 find 命令有结果时才有效。

是否可以通过管道连接到 ls

最佳思路

您可以将 -execfind 命令一起使用。

find . -name '*foo*' -exec ls -lah {} \;

次佳思路

find . -name *foo* | xargs -r ls -lah

那应该可行。

第三种思路

尝试这个:

find  . -name *.bak -ls

第四种思路

这适用于带有空格或不常见字符的文件名,并且 ls 可以对所有文件进行排序:

find . -name *foo* -print0 | xargs -0 ls -lah

-print0 表示文件名(例如 file foo 1)将从 find 获得输出,后跟空值。xargs 的 “-0” 参数告诉它期望这种输入,因此带空格的文件名可以正确地传输到 ls 命令。

xargs 构造在某些方面比 find etc -exec ls {} + 更好,因为所有文件名都会立即发送到 ls,因此如果您想按时间戳对它们进行排序(使用 ls ),如下所示:

find . -iname *pdf -print0 | xargs -0 ls -ltr

在 NetBSD 系统上,”-printx” 也是一个选项(对我来说这似乎是一个有用的参数,但无论如何,我们有 xargs -0 就可以了):

find . -name *foo* -printx | xargs ls -lah` # not for Ubuntu

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14529.html,未经允许,请勿转载。