我编写了一个脚本,每 6 小时将一个文件夹复制到备份文件夹,然后将它们放入/var/www/html/backup/
。
我复制文件的命令是cp -vR ~/world ~/backups/Backup\ on\ $date/world
我想要的结果是每个备份都成为一个文件夹,并且里面有一个名为的文件夹world
,它是从我的主文件夹复制而来的。
相反,我的命令保留了文件夹的完整路径。这意味着备份的文件夹结构最终是:
Backup on 5-3-2019 ↳ home ↳ elijahmc ↳ backups ↳ Backup on 5-3-2019 ↳ world
为了尝试修复此问题,我将参数从 更改为cp -vR
,cp -vr
这样就修复了下的文件夹/backups
,但当我将其移动到 Zip 时却不行。
回顾一下,我更改cp -vR
为cp -vr
现在的目录结构:
Backup on 5-3-2019 ↳ world
我现在将它转换成 zip 格式,如下所示:
rm -f ~/backup.zip
(删除原始 zip 文件)
zip -r ~/backup.zip ~/backups/Backup\ on\ $date
(将新的备份放入backup.zip
根目录中
mv -f ~/backup.zip /var/www/html/backup/
(移至backup.zip
网络服务器)
从Apache服务器下载backup.zip
,文件结构与原始命令存在同样的问题:
Backup on 5-3-2019 ↳ home ↳ elijahmc ↳ backups ↳ Backup on 5-3-2019 ↳ world
有人知道如何解决这个问题吗?
答案1
将文件夹复制
world
到~/backups/backup_2019-05-04
:backupdir=~/backups/backup_$(date +%F) mkdir -p "$backupdir" cp -av ~/world "$backupdir"
我使用了
-a
包含的存档模式标志-R
。您无需world
在目标参数中指定。仅包含
world
zip 文件中的文件夹~/backup_2019-05-04.zip
:cd "$backupdir" zip -r ~/backup_$(date +%F).zip *
当您“压缩”目录时,错误地使用了目标目录的完整路径。
答案2
是的,我建议你应该去参加 Bacula 课程,因为从长远来看这会更容易...但你最好先学习 bash。
~
扩展为的值$HOME
,- 该
cp
命令接受一个源(from)和一个目标(to)参数;- 如果您想要复制目录,请确保在
cp
使用后立即-R
进行递归复制。
- 如果您想要复制目录,请确保在
- 把那个'$date'放在一个子shell中,
$(date <args>)
这样你就可以得到正确的格式,就像在或mm-dd-yyyy
中会有更多信息一样man date
date --help