我正在从事一个项目,我将使用该项目将tar服务器上的数据增量备份到多个磁带。根据我的一位资深同事的说法,tar它将“在文件上设置特殊标志,以便它可以判断自上次备份以来文件是否已被修改”。我从来没有意识到,tar可以不断修改的源文件(不是删除等)。
我一直在浏览GNU tar 帮助页面和UNIX tar 手册页,但我还不能验证或反驳他所说的话。那么,这是完整的公牛吗,我将不得不使用像Bacula这样的东西,或者我可以做他正在解释的(以及如何)?
干杯! 罗素C
我想创建一个 tar ball 并仅包含目录中以特定文件名开头的文件。例如,我有 apples-xxx 和 oranges-xxx,我只想对以“apple”开头的文件进行 tar。我怎样才能做到这一点?
谢谢!
我的网络服务器上有一组由 duplicity 软件生成的文件:
已在未加密的情况下进行备份。
我目前的主机在他的服务器上没有口是心非,不想安装它。如何使用远程 SSH 访问解压这些文件?也许有一些 bash 脚本可以做到这一点?
根据http://www.gnu.org/software/automake/manual/tar/Incremental-Dumps.html,我尝试在我的 Ubuntu 上使用 tar 和 --listed-incremental 创建增量备份,但 --listed-增量部分对我不起作用。
在第 0 天,我执行:
SNAR_TODAY=`date +%Y_w%U_${DOW}`
TARGET='/srv/backups/'
SOURCE='/srv/data'
FILENAME=`date +%Y%m%d_%H%M`
tar -cvf $TARGET/$FILENAME.tar --atime-preserve --listed-incremental=$TARGET/$SNAR_TODAY.snar $SOURCE &> $TARGET/$FILENAME.log
Run Code Online (Sandbox Code Playgroud)
工作正常并创建我的 /srv/data 和 2011_wXY_0.snar 的完整备份。
在第 1-6 天,我执行:
DOW=`date +%u`
TODAY=$DOW
YESTERDAY=`expr $TODAY - 1`
SNAR_TODAY=`date +%Y_w%U_${TODAY}`
SNAR_YESTERDAY=`date +%Y_w%U_${YESTERDAY}`
TARGET='/srv/backups/'
SOURCE='/srv/data'
FILENAME=`date +%Y%m%d_%H%M`
cp -p $TARGET/$SNAR_YESTERDAY.snar $TARGET/$SNAR_TODAY.snar
tar -cvf $TARGET/$FILENAME.tar --atime-preserve --listed-incremental=$TARGET/$SNAR_TODAY.snar $SOURCE &> $TARGET/$FILENAME.log
Run Code Online (Sandbox Code Playgroud)
问题: tar 为完整目录创建一个新的 .tar - 不执行任何增量操作。
系统:Linux srv03 2.6.32-28-server #55-Ubuntu SMP
$ tar --version
tar (GNU tar) 1.22 …Run Code Online (Sandbox Code Playgroud) 我正在运行 CentOS 5.6,出于某种不正当的原因,版本tar是 2004 年的,与节点包管理器 (NPM) 不兼容。我怎么能更新它?是否有我可以添加的额外 yum 存储库,以便我可以简单地执行yum update tar.
我正在尝试修改我拥有的某个 tar.gz 存档。当我去创建 tar 时,它保留了父目录结构,就像 tarball 应该的那样。但是,有没有一种方法可以仅使用我指定的文件而不是整个目录树来简单地创建 tar 存档?
tar czf dist.tgz --exclude=".gitignore" 。
这会在 tar 中创建以“./”开头的文件,当服务器需要提取部分 tar 时,这会导致问题。
有人能告诉我如何打包它以便不会有前导“./”吗?
我有一个看起来像这样的备份命令:
tar cvpzf /backup/incremental-$now.tar.gz --after-date='1 day ago' -C / etc/ home/ root/ --exclude-from=/root/exclusion_list.txt --warning=no-file-unchanged > /backup/log-$now.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
问题是它还包括空文件夹,当其中的所有文件都没有改变时,因此不包括在增量备份中。我正在寻找一种方法来避免这种情况,但我找到的唯一解决方案(将 find 的结果作为 xargs 的参数通过管道传输到 tar)仅在您拥有一个文件夹时才有效,我有其中三个。
我们想备份我们的服务器,这似乎是一件非常简单的事情,除了一个。目前我们使用这样的东西:
tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys /
一切都很好,但我们不想包含挂载点,因为一些 ftp 用户已经通过 chroot 访问他们的家,挂载如下:
mount --bind /var/www/folder /home/user/html
有没有办法从备份中排除此类文件夹?
我正在寻找一种很好的方法来生成备份 tar.gz,该备份 tar.gz 将被另一个 tar.gz 的提取覆盖。
tar -ztf patch.tar.gz | grep -v "/$" | tar -T- -zcvf backup.tar.gz
Run Code Online (Sandbox Code Playgroud)
这工作得很好!但是,有时,新补丁(patch.tar.gz)不仅会包含硬盘中已经存在的文件,而且可能会添加不存在的新文件。这些不存在的文件将无法备份,第二个 tar 将产生错误。退出代码是2。
tar:文件夹/文件.txt:无法统计:没有这样的文件或目录
tar:由于先前的错误而以失败状态退出
我正在寻找仅检查文件存在 (stdin) 并在 stdout 上发送现有文件的 shell 命令。它存在吗?我需要这样的东西:
tar -ztf patch.tar.gz | grep -v "/$" | filterfileexist | tar -T- -zcvf backup.tar.gz
Run Code Online (Sandbox Code Playgroud)
我需要一个 shell 命令而不是一个 shell 脚本。
显然,我可以自己在 C 中实现这个 shell 命令,因为它非常简单,但我希望找到一些可以在其他 UNIX 平台上找到的通用内容。