【发布时间】:2011-09-26 08:21:12
【问题描述】:
我每次都尝试使用不同的文件作为参数执行一个脚本 n 次:
ls /user/local/*.log | xargs script.pl
(script.pl 接受文件名作为参数)
但脚本只执行一次。如何解决这个问题?我做的不对吗?
【问题讨论】:
标签: linux perl unix stdout xargs
我每次都尝试使用不同的文件作为参数执行一个脚本 n 次:
ls /user/local/*.log | xargs script.pl
(script.pl 接受文件名作为参数)
但脚本只执行一次。如何解决这个问题?我做的不对吗?
【问题讨论】:
标签: linux perl unix stdout xargs
ls /user/local/*.log | xargs -rn1 script.pl
我猜你的脚本只需要一个参数,你需要告诉 xargs。
如果输入列表为空,传递 -r 会有所帮助
请注意,一般来说,以下内容更好:
find /user/local/ -maxdepth 1 -type f -name '*.log' -print0 |
xargs -0rn1 script.pl
它将更安全地处理引用和目录。
要查看 xargs 实际执行的内容,请使用 -t 标志。
【讨论】:
我希望这会有所帮助:
for i in $(ls /usr/local/*.log)
do
script.pl $i
done
【讨论】:
我会避免使用ls,因为这通常是许多系统上的别名。例如。如果您的 ls 产生彩色输出,那么这将不起作用:
我在ls;做 ls $i;完成
相反,您可以让 shell 为您扩展通配符: 对于我在 /usr/local/*.log 中;做脚本.pl $i;完成
【讨论】: