16

我想将某个文件复制到某个位置,而不管该文件是否已存在于目标中。我正在尝试通过 shell 脚本进行复制。但是文件没有被复制。我正在使用以下命令

/bin/cp -rf /source/file /destination

但这不起作用。

4

4 回答 4

16

利用

cp -fr /source/file /destination

这应该可以解决问题。

于 2012-12-13T15:05:26.350 回答
14

您的问题可能是由系统中默认创建的 cp 命令的别名引起的(您可以通过键入“alias”来查看所有别名)。比如我的系统默认有以下alis:alias cp='cp -i',其中-i覆盖-f选项,即cp会一直提示覆盖确认。

在这种情况下,您需要的(即使您没有别名也可以使用)是向该确认提供“是”。为此,只需将您的 cp 命令修改为如下所示:

是的 | cp /源/文件/目标

于 2013-02-16T14:37:00.963 回答
14

这个问题已经讨论过了,但是你可以写一个像这样的小脚本:

#!/bin/bash
if [ ! -d "$2" ]; then
  mkdir -p "$2"
fi
cp -R "$1" "$2"

稍微解释一下这个脚本

  1. #!/bin/bash: 告诉您的计算机使用bash解释器

  2. if [ ! -d "$2" ]; then:如果您提供的第二个变量不存在...

  3. mkdir -p "$2":创建该目录,包括路径中提供的任何父目录。

    运行mkdir -p one/two/three将使:

    $ mkdir -p one/two/three
    $ tree one
    one/
    └── two
        └── three
    

    如果您不提供标签,那么如果目录不存在,-p您将收到错误消息:onetwo

    $ mkdir one/two/three
    mkdir: cannot create directory ‘one/two/three’: No such file or directory
    
  4. fi: 关闭if语句。

  5. cp -R "$1" "$2": 将文件从您提供的第一个变量复制到您提供的第二个变量的目录。

    因此,如果您运行script.sh mars plutomars将是第一个变量 ( $1) 并且pluto将是第二个变量 ( $2)。

    -R标志意味着它递归地执行此操作,因此该cp命令将遍历第一个变量中的所有文件和文件夹,并将它们复制到第二个变量的目录中。

于 2012-12-13T08:45:58.837 回答
1

/bin/cp -rf src dst 或 /usr/bin/env cp -rf

于 2014-03-12T22:22:33.720 回答