您好我正在尝试将所有文件从Documents目录复制到具有时间戳的备份目录。所以我创建了一个名为bk $的文件夹(文件夹的时间戳),我正在尝试将文件从Documents目录复制到新创建的唯一文件夹。这将在crontab中备份文档中的文件,当备份启动时,它将为每个备份创建一个新目录,该目录由文件夹时间戳唯一标识。出于某种原因,我无法获得cp或cpio -mdp。现在有人提到我可以使用$ PATH变量,这似乎很有希望,如果这是解决方案,如果有人可以帮助我使其工作。
bkdest=home/user/backup/
bksource="/home/user/Documents/"
export PATH=/$bkdest:$PATH
mkdir /"$bkdest"bk.$(date +%Y_%m_%d_%H_%M_%S)
cp /"$bksource"* $PATH
我试图用它来实现其他方法:
cp $bksource * ls | tail -l | $PATH
我本可以使用ctime但不幸的是它不适用于文件夹创建日期。
这是我的方法,但是使用了最新创建的文件夹而不是文件
find $HOME -type d -daystart ctime 0
如果有人可以帮我复制到那个新文件夹,我真的很感激。谢谢!
答案 0 :(得分:0)
将目标名称存储在变量中:
bkdest=/home/user/backup
bksource=/home/user/Documents
target=${bkdest}/bk.$(date +%Y_%m_%d_%H_%M_%S)
mkdir -p $target
cp ${bksource}/* ${target}/
注意我稍微整理了你对变量的使用。
此外,这不会复制子目录。为此,您需要使用cp -R
。当我做备份时,我更喜欢使用rsync
。
答案 1 :(得分:0)
我并没有完全理解你的方法,或者你究竟想做什么,但在这里。
您不应该使用cp
进行备份,rsync
更适合这种情况。但如果由于某种原因你真的需要使用cp
,你可以使用以下脚本。
#!/bin/bash
BKP_DIR=/tmp/bkp
BKP_SRC=/tmp/foo
SNAPSHOT=${BKP_DIR}/$(date +%F.%H-%M-%S.%N)
mkdir -p ${SNAPSHOT}
cp -r ${BKP_SRC}/* ${SNAPSHOT}
这里没有太大的变化。
#!/bin/bash
BKP_DIR=/tmp/bkp
BKP_SRC=/tmp/foo
SNAPSHOT=${BKP_DIR}/$(date +%F.%H-%M-%S.%N)
rsync -a ${BKP_SRC}/ ${SNAPSHOT}/
#!/bin/bash
BKP_DIR=/tmp/bkp
BKP_SRC=/tmp/foo
SNAPSHOT=${BKP_DIR}/$(date +%F.%H-%M-%S.%N)
LATEST=${BKP_DIR}/latest
rsync \
--archive \
--delete \
--backup \
--backup-dir=${SNAPSHOT} \
--log-file=${BKP_DIR}/rsync.log \
${BKP_SRC}/ ${LATEST}/
解释: --archive
加上--delete
将确保$LATEST
是$BKP_SRC
的完美副本,这意味着不再有文件$BKP_SRC
中存在的内容将从$LATEST
中删除。 --archive
选项还可确保维护权限和所有者,将符号链接复制为符号链接等等(有关详细信息,请查看man rsync
)。
--backup
加--backup-dir
选项将创建一个备份目录来放置差异文件。换句话说,自上次备份以来删除或修改的所有文件都将放在那里,因此当您从$LATEST
删除它们时,不会丢失它们。
--log-file
是可选的,但保留日志以进行调试是不错的。
最后,您有一个增量备份。