63

GNU tar 可以将许多文件添加到存档中,并在添加时删除每个文件吗?

当没有足够的磁盘空间来保存整个 tar 存档和原始文件时,这很有用 - 因此不可能在以通常的方式创建存档后简单地手动删除文件。

4

4 回答 4

93

对于 GNU tar,使用选项 --remove-files.

于 2012-05-28T08:50:46.967 回答
5

我有一个任务 - 存档文件,然后在没有 GNU 选项的情况下将其删除到安装了“tar”的操作系统中。

方法:

使用“xargs”

假设我们有一个包含文件的目录。
需要在一周内将所有文件移动到 tar 中并将其删除。
我做了一个存档(arc.tar)并向其中添加了文件。(您可以每次尝试创建新存档)

解决方案:

find ./ -mtime +7 | xargs -I % sh -c 'tar -rf arc.tar % && rm -f %'
于 2013-11-28T19:45:30.420 回答
2

对于非 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
于 2019-02-21T14:36:59.523 回答
0

我不确定您是否可以在不先解压缩的情况下将文件添加到 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 给单个文件增加了多少开销。这需要测试。

于 2012-05-28T09:03:05.417 回答