免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2445 | 回复: 4

xargs 能否一次执行一个命令 [复制链接]

论坛徽章:
0
发表于 2010-03-17 18:44 |显示全部楼层
RT

$ find . -type l -print | xargs file
./old/aes.h:         broken symbolic link to `../../crypto/aes/aes.h'
./old/asn1.h:        broken symbolic link to `../../crypto/asn1/asn1.h'
./old/asn1t.h:       broken symbolic link to `../../crypto/asn1/asn1t.h'

OK,没问题,但是我想用 realpath,要他输出的简单的形式,可是:

$ find . -type l -print | xargs realpath
realpath: too many arguments

报参数过多错误,看来 xargs 只启动一个 realpath,然后把一瓢 find 结果传给 realpath,realpath 不支持多参数,而 file 命令是支持的,所以不会错。

怎样让 xargs 把一条 find 结果(按 \n 分隔)传个 xargs 执行,然后执行多次 realpath 呢?

否则的话我只能:

for FILE in $LINK_LIST; do
        # echo "FILE: $FILE"
        REAL_PATH=`realpath $FILE`
        cp -i "$REAL_PATH" temp
done

不想用脚本,一行的命令最好。

论坛徽章:
0
发表于 2010-03-17 18:55 |显示全部楼层
回复 1# silon212
  1. find . -type l -print | xargs -n 1 realpath
复制代码

论坛徽章:
0
发表于 2010-03-17 23:59 |显示全部楼层
多谢 where27,要不是你,打死我也不懂 man 在说什么,打击我的 E 文。

       -n  number
              Invoke  utility  using  as  many  standard  input  arguments  as
              possible,  up  to  number (a positive decimal integer) arguments
              maximum. Fewer arguments shall be used if:

论坛徽章:
0
发表于 2010-03-18 07:13 |显示全部楼层
回复 1# silon212


    -exec

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2010-03-18 14:17 |显示全部楼层
回复 4# wtuter


-exec行吗?
      在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP