如何将文件复制到时间戳自动生成的文件夹?

时间:2015-07-29 07:03:15

标签: linux bash unix

您好我正在尝试将所有文​​件从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

如果有人可以帮我复制到那个新文件夹,我真的很感激。谢谢!

2 个答案:

答案 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方法

您不应该使用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}

Rsync方法

这里没有太大的变化。

#!/bin/bash

BKP_DIR=/tmp/bkp
BKP_SRC=/tmp/foo
SNAPSHOT=${BKP_DIR}/$(date +%F.%H-%M-%S.%N)

rsync -a ${BKP_SRC}/ ${SNAPSHOT}/

改进的Rsync方法(推荐)

#!/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是可选的,但保留日志以进行调试是不错的。

最后,您有一个增量备份。