shell脚本实现判断文件是否存在,然后不存在则拷贝文件

我想实现某个功能,例如判断某个目录下是否存在一个文件,例如叫series_migration_task.xml,如果存在该文件则跳过不做什么操作,如果不存在该文件,则拷贝脚本main.sh同一目录下的series_migration_task.xml到其目录,我的实现如下:

#!/bin/sh
myFile="/root/apue/series_migration_task.xml "

# 这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
cp  ./series_migration_task.xml  /root/apue/
fi

echo "success"

我的初衷是判断目录/root/apue目录下是否有文件series_migration_task.xml文件,如果没有的话就cp拷贝当前目录下的series_migration_task.xml到目录下。结果按照这个脚本去操作,不管/root/apue下是否存在该文件都会去覆盖,不知道是为什么?
我搜得-f是判断文件是否存在,不知道哪里有问题。

问题答案:
参考采纳答案评论,因为在第二行文件myFile最后引号前多了个空格。

阅读 19.2k
3 个回答

有可能是没有读取 /root 的权限

试试以 sudo 执行,或是:

if sudo [ ! -f $myFile ]; then

你拷贝的方向不对吧?
cp ./series_migration_task.xml /root/apue/

cp 源文件 目标文件夹

好像没我啥事了,建议一下,以后shell中的变量最好${variable}这么表示,提高代码阅读性和避免了歧义,养成一个好的习惯也是不错的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题