在 Linux 中复制文件保留完整路径

在 Linux 中复制文件保留完整路径

我编写了一个脚本,每 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 -vRcp -vr这样就修复了下的文件夹/backups,但当我将其移动到 Zip 时却不行。

回顾一下,我更改cp -vRcp -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

  1. 将文件夹复制world~/backups/backup_2019-05-04

    backupdir=~/backups/backup_$(date +%F)
    mkdir -p "$backupdir"
    cp -av ~/world "$backupdir"
    

    我使用了-a包含的存档模式标志-R。您无需world在目标参数中指定。

  2. 仅包含worldzip 文件中的文件夹~/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 datedate --help

相关内容