Easy shell解决方案为每行stdout执行命令

时间:2010-03-04 01:20:01

标签: shell

这应该是一个非常简单的任务:我想获取任何旧命令的stdout的每一行,并使用每个命令执行另一个命令作为参数。

例如:

ls | grep foo | applycommand'mv%s bar /'

这会使所有内容与“ foo ”匹配并将其移至条形码/目录。

(我觉得有点尴尬,询问可能是一个非常明显的解决方案。)

3 个答案:

答案 0 :(得分:14)

该程序名为xargs

ls | grep foo | xargs -I %s mv %s bar/

答案 1 :(得分:7)

ls | grep foo | while read FILE; do mv "$FILE" bar/; done

这个特殊的操作可以更简单地完成:

mv *foo* bar/

或者是递归解决方案:

find -name '*foo*' -exec mv {} bar/ \;

find命令{}中将替换为匹配的文件列表。

答案 2 :(得分:0)

对于你的情况,这样做就像这样。

for file in *foo*
do
   if [ -f "$file" ];then
      mv "$file" /destination
   fi
done

如果您不关心目录或文件,请将其删除

mv *foo* /destination