如何将管道输入定向到ls命令?
当我输入类似的内容时:
find . -name *foo* | ls -lah
它返回与plain ls
命令相同的结果,就好像它没有输入一样。
然而:
ls -lah $( find . -name *foo* )
效果很好,但只有当find
命令有结果时才有效。
管道到ls
有可能吗?
您可以将-exec
与find
命令一起使用。
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)