无法将文件夹从源覆盖到目标

时间:2018-12-11 10:09:47

标签: bash cp

您好,我正尝试使用以下外壳脚本将文件夹 发布 source覆盖为destination

update.sh

src= './Server/Core/Server/bin/Debug/netcoreapp2.1/publish'
dest= './Server/publish'
echo  "Src:${src},Dest:${dest}"
cp  "$src" "$dest"

我遇到以下错误:

$ ./update.sh
./update.sh: line 1: ./Server/Core/Server/bin/Debug/netcoreapp2.1/publish: Is a directory
./update.sh: line 2: ./Server/publish: Is a directory
Src:,Dest:
cp: cannot stat '': No such file or directory

为什么它不能解析srcdest?我已经尝试"$src""${src}"都没有用。

3 个答案:

答案 0 :(得分:2)

删除第一个引号之前的空格,在=之前或之后不应存在空格。

变量应这样声明:

src='./Server/Core/Server/bin/Debug/netcoreapp2.1/publish'
dest='./Server/publish'

用引号前的空格将其视为需要执行的文件,如果这些命令存在,则这些命令的结果将是变量的值。

类似地,如果您在=之前添加了空格,它将变量名视为需要执行的命令。

来自bash手册页

  

可以通过以下形式的语句将变量赋给

     

名称= [值]

答案 1 :(得分:1)

几件事:

  1. 您首先应该在bash脚本中添加标题
  2. 然后您的变量分配不正确(多余的空格)
  3. 您的cp不会复制任何最终的子目录

工作示例:

#!/bin/bash

src="./src/data"
dest="./dst/data"
echo  "Src:${src},Dest:${dest}"
rm -rf ${dest}
cp -R ${src} ${dest}

答案 2 :(得分:1)

只需删除变量分配中的空格即可。 另外,对于带有子目录的复制,请使用“ cp -r”来递归复制目录

对其他选项执行“ cp --help