我尝试进行完整备份并将所有文件从一个目录复制到另一个目录
#!/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
答案 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}}