HP-UX ***** B.11.23 U ia64 ****无限用户许可证
find . -type d -name *log* | xargs ls -la
给我目录名称(目录名称中包含log
的目录名称),后跟该目录中的所有文件。
该目录 /var/opt/SID/application_a/log/
, /var/opt/SID/application_b/log/
, /var/opt/SID/application_c/log/
等包含日志文件。
我只希望该ls
命令列出两个最新的日志文件,通常可以使用来找到ls -latr | tail -2
。
输出必须是这样的。
/var/opt/SID/application_a/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
/var/opt/SID/application_b/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
/var/opt/SID/application_c/log/
-rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1
-rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2
find . -type d -name *log* | xargs ls -la | tail -2
没有给我上述结果。我得到的是find . -type d -name *log* | xargs ls -la
命令的最后两个文件的列表
。
那我可以在管道传输后通过管道传输命令xargs
吗?我还应该如何查询,以得到上述格式的文件结果列表?
find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10"
给我列出了当前目录中的十个目录名,而这恰恰/var/opt/SID
是我想要的。
sh -c
期望将命令名称(参数0)作为其第二个参数,因此您应该始终这样做find . -type d -name *log* | xargs sh -c "ls -ltr | tail -10" lstail
(注意lstail
最后的,这将$0
与创建的shell一样)。否则,您的第一个结果将填补该角色而无法使用。
*log*
否则shell将对其进行扩展。