cp:丢失后的目标文件操作数

时间:2013-12-02 08:45:56

标签: bash unix terminal

我尝试进行完整备份并将所有文件从一个目录复制到另一个目录

    #!/bin/bash 

    #getting files from this directory
    PROJECTDIRECTORY=/../../Project3 

    #Copied to this directory 
    FILEBACKUPLOCATION= /../.../FMonday

    for FILENAME in $PROJECTDIRECTORY/*
    do
        cp $FILENAME $FILEBACKUPLOCATION
        done  

但我一直收到这个错误

./fullbackup: line 6: /../../FMonday: Is a directory
cp: missing destination file operand after

4 个答案:

答案 0 :(得分:4)

bash脚本中的变量赋值在变量名称和值之间不需要空格,或者在值内(除非引用)。由于行FILEBACKUPLOCATION= /../.../FMonday中存在空格,因此尝试将/../.../FMonday作为命令执行(导致第一个错误),并将FILEBACKUPLOCATION分配给空字符串。当另一个命令进一步向下试图使用它时,该变量未被分配(考虑到第二个错误)。

答案 1 :(得分:2)

我认为您需要的是FILEBACKUPLOCATION=/FMonday/

答案 2 :(得分:1)

就我而言,我只是在文件名之后使用了二手空格和点运算符。它运作得很好。

例如,darthVader是F驱动器内的文件名。所以,我使用命令" mv / f / darthVader。 "

答案 3 :(得分:1)

您是否已经发现变量需要为FILEBACKUPLOCATION=/location,并且没有空格,还可以尝试使用类似以下的方法使脚本更具可移植性:

FILEBACKUPLOCATION=$HOME/backup/FMonday

在这种情况下,位置是相对于用户$HOME环境变量的。

更进一步,如果您想使2个文件保持同步,则可以使用rsync做得更好,优点之一是它只会复制不存在的文件或更新已经存在的文件。改变了。

您确实可以创建别名以按需复制/同步文件,例如:

alias cpr="rsync --delete --archive --numeric-ids --human-readable --no-compress --whole-file --verbose --info=progress2"

然后,如果您想将/dir/foo的内容同步到/dir/bar中,只需执行以下操作:

$ cpr /dir/foo/ /dir/bar/

您的脚本也可能类似于:

#!/bin/sh

ORIGIN=/path/to/foo/
DESTINATION=/path/to/bar/

rsync --delete \
--archive \
--numeric-ids \
--human-readable \
--no-compress \
--whole-file \
--verbose \
--info=progress2 \
$ORIGIN $DESTINATION

请注意,在这种情况下,将使用选项--no-compress--whole-file,主要是因为文件将在本地复制,如果远程服务器选项可能不同,请查看这篇文章({{ 3}}