我有一个遍历目录中所有.ooutline文件的脚本,应该将它们复制到另一个文件夹中。
for file in *.ooutline; do
echo cp \'"$file"\' "$HOME"/Omnipresence/outlines3/
done
现在,当我回显脚本并像这样运行它时:
./bcpy.sh > out1.sh
echo产生完美的cp语句,在chmod a + x之后,我可以将out1.sh作为批处理脚本运行。我得到这样的cp语句:
cp 'savethecat steps.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'steps 8 28.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'story points 3 2.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
cp 'story points 3.ooutline' /Users/michaelisbell/Omnipresence/outlines3/
它们在out1.sh文件中完美执行。
在删除回显之后,它们不会执行,但是在bcpy.sh文件中执行。我收到此错误:
cp: 'savethecat steps.ooutline': No such file or directory
cp: 'steps 8 28.ooutline': No such file or directory
cp: 'story points 3 2.ooutline': No such file or directory
cp: 'story points 3.ooutline': No such file or directory
如果有人能告诉我我做错了什么,为什么我的命令没有按我期望的那样在bcpy2.sh脚本中执行,我将不胜感激。
答案 0 :(得分:3)
您的问题似乎是文件名中的空格。
如果您执行正确的报价,则不必担心。在您可以直接执行命令时,将cp
命令回显到文件并从中执行是没有意义的。
你可以
for file in *.ooutline; do
cp "$file" "$HOME"/Omnipresence/outlines3/
done
或将上面的内容放在第一行的bcpy.sh文件中
#!/bin/bash
并使用chmod +x bcpy/sh
使bcpy.sh可执行并运行
下一步为./bcpy.sh
。