这应该是一个非常简单的任务:我想获取任何旧命令的stdout的每一行,并使用它们执行另一个命令,并将其作为参数。简单的shell解决方案为stdout的每一行执行命令
例如:
ls | grep foo |应用命令'mv%s bar /'
这将取得匹配“foo”的所有内容并将其移动到条形图/目录。
(我觉得有点不好意思问什么可能是一个可笑的显而易见的解决方案。)
这应该是一个非常简单的任务:我想获取任何旧命令的stdout的每一行,并使用它们执行另一个命令,并将其作为参数。简单的shell解决方案为stdout的每一行执行命令
例如:
ls | grep foo |应用命令'mv%s bar /'
这将取得匹配“foo”的所有内容并将其移动到条形图/目录。
(我觉得有点不好意思问什么可能是一个可笑的显而易见的解决方案。)
ls | grep foo | while read FILE; do mv "$FILE" bar/; done
这个特殊的操作可以更简单地完成,但是:
mv *foo* bar/
或者一个递归解决方案:
find -name '*foo*' -exec mv {} bar/ \;
在find
命令{}
将被替换匹配的文件列表。
几乎是正确的:在执行'-exec ... +'时,'{}'必须立即在'+'之前。你可以使用';'形式:'-exec mv {} bar /';''。 – 2010-03-04 01:25:22
您的情况,只是这样做。
for file in *foo*
do
if [ -f "$file" ];then
mv "$file" /destination
fi
done
或只是MV,如果你不关心目录或文件
mv *foo* /destination
如果您的文件名有空格的:http://mywiki.wooledge.org/BashFAQ/020 – 2010-03-04 01:33:14