如何将管道输入定向到ls命令?

当我输入类似的内容时:

find . -name *foo* | ls -lah 

它返回与plain 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后跟null输出。 xargs的“-0”参数告诉它期望这种输入,所以带空格的文件名正确地通过管道传递给ls命令。

xargs构造在某些方面比find etc -exec ls {} \;更好find etc -exec ls {} \; 因为所有文件名都会立即发送到ls ,所以如果你想通过timestamp(使用ls )对它们进行排序,那么这样的工作原理:

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

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

find . -name *foo* -printx | xargs ls -lah find . -name *foo* -printx | xargs ls -lah (不适用于Ubuntu)