将文件复制到其他文件时出现错误。 cp:目标不是目录

时间:2019-05-11 13:14:16

标签: linux bash shell

当我尝试运行以下代码时,它给出了cp: target "Featurespath" is not a directory的错误

我尝试了多种选择,但没有用。

Featurespath=/permanent/jag/media-*/*/print/cooked/*Features.xml
for file in $(ls $Featurespath);
do
cat $Featurespath | sed "/pB-/s/Direction=\"unidir\"/Direction=\"bidir\"/" $Featurespath > /permanent/jag/temp.xml
cp -rf /permanent/jag/temp.xml $Featurespath
rm /permanent/jag/temp.xml
done

我希望将修改后的xml粘贴到同一xml文件中。

1 个答案:

答案 0 :(得分:1)

您收到的错误是由于cp行引起的:bash将$Featurespath扩展到文件列表中。当cp看到两个以上的参数时,它假定最后一个参数是目录,在这种情况下不是这样。这是我建议的解决方法:

Featurespath=/permanent/jag/media-*/*/print/cooked/*Features.xml
for file in $Featurespath
do
    sed "/pB-/s/Direction=\"unidir\"/Direction=\"bidir\"/" "$file" > /permanent/jag/temp.xml
    mv -f /permanent/jag/temp.xml "$file"
done

注释

  • 请勿使用ls:bash可以很好地扩展通配符
  • 在循环中,您现在正在处理单个文件$file,而不是文件$Featurespath的列表
  • 不需要使用cat命令,sed命令可以获取文件名
  • sed具有内联编辑选项,可消除对临时文件的需求。您可能需要调查一下。
  • cp代替rm / mv组合
  • 最终,就像其他人所说的那样,sed不是编辑XML内容的正确工具,但它可能适用于简单的情况