我想定期(例如每天凌晨 4 点)对目录进行 tar 压缩,因此我计划使用 crontab。如何在文件名中包含日期,即 srcdirectorybackup5-30-09.tar,以便我可以区分所有 tar 文件。
我们希望备份大约 100gb+ 的数据,每个数据包含小文件 (10kb+)。每周需要尽快备份到另一个硬盘。在这种情况下,哪种备份方式更好(尤其是速度方面)?Rsync 还是 tar?
刚刚了解到cpio有3种模式:copy-out、copy-in和pass-through。
我想知道在拷出和拷入模式下 cpio 相对于 tar 的优缺点是什么。什么时候用cpio比较好,什么时候用tar?
传递模式下 cpio 与 cp 的类似问题。
感谢致敬!
我想创建一个 tarball,其中包含ctime小于 30 天的目录中的文件。我发现的大多数教程基本上都推荐做这样的事情:
tar cvf foo.tar $(find ~/POD -type f -ctime -30)
Run Code Online (Sandbox Code Playgroud)
问题是我想压缩的很多文件的名称中都包含空格。这意味着该tar命令将基于空格分隔,这意味着完整的文件路径将被分解。
所以现在我试图让find命令返回一个带引号的文件路径列表。所以这是我尝试过的:
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
Run Code Online (Sandbox Code Playgroud)
但是这个命令也把所有基于空格的文件名分解了。然后我尝试了这个:
oldifs=$IFS
IFS=\n
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
IFS=$oldifs
Run Code Online (Sandbox Code Playgroud)
但这给了我相同的结果。
有没有办法可以将完整路径名传递给tar并让所有内容都使用名称中的空格?
在 7-zip 文件管理器中,我创建了一个 tar 文件(里面有许多子目录和文件)。我将此文件上传到 Debian 服务器,但无法提取:
tar -xvfz files.tar
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
我也试过 tar-xvf userpics.tar但后来什么也没发生。
任何想法如何提取这个文件?
我们在生产 Web 服务器上有一项任务,需要从整个文件系统中压缩文件。它运行了大约 105 分钟,在此期间,Apache 开始交换,因为所有这些文件的读取已经扩展了文件系统缓存的内存量。
tar 正在读取的数据不需要存在于文件系统缓存中。它会进入 tarfile,仅此而已。有什么我们可以说的tar cvf whatever/ --no-system-file-buffer-reads吗?我的阅读man tar没有发现任何看起来有帮助的东西。
您不必指出这可以被视为“医生,我那样去会很痛!所以不要那样去”的情况。不知何故,我们需要将文件转储到 tar 文件中,所以不这样做不是一种选择。
我以前从未发生过这种情况,但我无法执行简单的任务,例如在 Ubuntu Linux 18.04 上使用任何流行的压缩工具(例如gzip、bzip2和7z )压缩 18.5 GB 文件。他们都报告了类似的警告(不是错误)消息,声称文件大小在压缩期间发生了变化,而实际上没有其他进程正在访问该文件。例如,当尝试“tar-gz”时,该工具报告:File shrank by <nnnnnnnn> bytes; padding with zeros,以错误代码 1 退出,tar 的联机帮助页说这是由于压缩期间文件更改造成的:
退出代码 1:某些文件不同。如果使用 --compare (--diff, -d) 命令行选项调用 tar,这意味着存档中的某些文件与其磁盘对应文件不同。如果 tar 被赋予 --create、--append 或 --update 选项之一,则此退出代码意味着某些文件在存档时已更改,因此生成的存档不包含文件集的确切副本。
该文件是一个 VMDK,当然,当我压缩它时,关联的 VM 会完全关闭。另一方面,我注意到当压缩文件达到 280 MB 左右时,所有压缩工具都会失败。
我已经在 ServerFault 上检查了其他类似的问题,但我仍然没有得到任何提示来弄清楚发生了什么。对链接问题投票最多的答案说,这不是错误,压缩工具只是“简化”了一堆零字节,但是如果我在解压缩 VMDK 文件后尝试运行 VM,它无法声明磁盘已损坏。
我完全坚持这一点。关于可能发生什么的任何想法?
更新
在尝试使用该cp命令将文件复制到另一个目录时,它在读取文件时转储了 I/O 错误。另一方面,dmesg在读取文件的特定块时报告 I/O 错误。一切都指向磁盘错误(尽管e2fsck说一切正常并且有 0 个坏块)。由于我已经有了 VM 的备份,我将尝试更改主机的磁盘并重新安装 Ubuntu 的新副本,然后看看会发生什么。我一直在发布这个问题,直到我得到一些结果。
我正在运行 CentOS 5.6,出于某种不正当的原因,版本tar是 2004 年的,与节点包管理器 (NPM) 不兼容。我怎么能更新它?是否有我可以添加的额外 yum 存储库,以便我可以简单地执行yum update tar.
我正在尝试修改我拥有的某个 tar.gz 存档。当我去创建 tar 时,它保留了父目录结构,就像 tarball 应该的那样。但是,有没有一种方法可以仅使用我指定的文件而不是整个目录树来简单地创建 tar 存档?
tar czf dist.tgz --exclude=".gitignore" 。
这会在 tar 中创建以“./”开头的文件,当服务器需要提取部分 tar 时,这会导致问题。
有人能告诉我如何打包它以便不会有前导“./”吗?