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

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

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

find . -name *foo* | ls -lah

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

然而:

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

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

是否可以通过管道传输ls

答案1

您可以使用-exec命令find

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

答案2

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

那应该可行。

答案3

尝试这个:

find  . -name *.bak -ls

答案4

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

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

-print0表示文件名如file foo 1将获得输出,find后跟 null。“-0”参数xargs告诉它期望这种输入,因此带空格的文件名可以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

相关内容