添加到 tar 存档后删除文件
Posted
技术标签:
【中文标题】添加到 tar 存档后删除文件【英文标题】:Deleting files after adding to tar archive 【发布时间】:2012-05-28 08:34:05 【问题描述】:GNU tar 是否可以将许多文件添加到存档中,并在添加时删除每个文件?
当没有足够的磁盘空间来保存整个 tar 存档和原始文件时,这很有用 - 因此无法在以通常方式创建存档后简单地手动删除文件。
【问题讨论】:
目录中存在的所有文件都必须压缩吗?man tar
不回答你的问题吗?
是的,我有一个名为 images 的目录。我正在执行 tar cvjf images.tar.bz2 images/ 但磁盘空间不足。
一个解决方案是对整个文件进行 ftp 到另一台机器-> 归档它--> 然后将“归档文件”移回同一台机器
我不想这样做,因为有很多文件,我可能需要再做一次,甚至更多
【参考方案1】:
对于 GNU tar,使用 option --remove-files
。
【讨论】:
您确定使用此标志会在将每个文件添加到存档后删除它,而不是在进程结束时删除所有文件吗? @EugeneS:我检查了 GNU tar 源代码,在归档和删除之间存在一些(可配置的)延迟,但 tar 不会等待整个 tarball 被创建。 bsdtar 怎么样?有人吗? 效果很好。通过 pg_dump -Fd 帮助进行备份【参考方案2】:我有一个任务 - 存档文件,然后删除到没有 GNU 选项的安装“tar”的操作系统中。
方法:
使用“xargs”
假设,我们有一个包含文件的目录。 需要在一周内将所有文件移动到 tar 中并将其删除。 我做了一个存档 (arc.tar) 并向其中添加了文件。 (您可以每次尝试创建新存档)
解决办法:
find ./ -mtime +7 | xargs -I % sh -c 'tar -rf arc.tar % && rm -f %'
【讨论】:
1.我会在tar
和rm
命令之间使用&&
而不是;
,因此只有在成功添加到存档时才删除文件。 2. 如果您的find
有,请考虑使用-exec
选项。 ***.com/a/6043896/711006【参考方案3】:
对于非 GNU tar,您可以使用“-u”循环处理每个文件的文件
tar -cf archive.tar afile
for myfile in dir/*.ext
do
tar -uf archive.tar $myfile && rm $myfile || echo "error tar -uf archive.tar $myfile"
done
【讨论】:
欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案添加解释,并说明适用的限制和假设。【参考方案4】:我不确定您是否可以在不先解压缩的情况下将文件添加到 bzip2 档案中。然而,这是我刚刚想到的一种解决方案(给你伪算法):
1. For each [file] in [all small files]
1.1 compress [file] into [file].bz2
1.2 (optionally verify the process in some way)
1.3 delete [file]
2. For each [bzfile] in [all bzip files from step 1]
2.1 append to tar (tar rvf compressedfiles.tar [bzfile]
2.2 (optionally verify the process in some way)
2.3 delete [bzfile]
现在您应该有一个 tar 文件,其中包含所有单独的 bzip2:ed 文件。问题是 bzip2 给单个文件增加了多少开销。这需要测试。
【讨论】:
以上是关于添加到 tar 存档后删除文件的主要内容,如果未能解决你的问题,请参考以下文章