Tar:避免归档大于特定大小的文件

Tar:避免归档大于特定大小的文件

我想用 tar 归档大小小于 3 MB 的文件。但我还想保留这些文件所在的目录。(所以我不能使用find命令)。我只想避免那些大小超过 3 MB 的文件。该怎么做?

答案1

比你想象的更简单:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

在半相关的说明中(与您不能使用 find 的声明有关),要获取路径下所有文件(包括目录)的列表减去大于 3MiB 的文件,请使用:

$ find . -size -3M -o -type d

然后你可以这样做:

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

但我更喜欢第一个,因为它更简单,清楚地表达了你的需求,并且不会带来太多意外。

答案2

如果文件名包含方括号,在某些系统中,需要明确排除。例如

$ mkdir test
$ echo "abcde123456" > ./test/a[b].txt
$ echo "1" > ./test/a1.txt
$ ls -la ./test
total 16
drwxrwxr-x 2 user user 4096 Jan 10 16:38 .
drwx------ 4 user user 4096 Jan 10 16:38 ..
-rw-rw-r-- 1 user user    2 Jan 10 16:38 a1.txt
-rw-rw-r-- 1 user user   12 Jan 10 16:38 a[b].txt
$ tar -zcvpf a.tar.gz ./test
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf a3.tar.gz ./test --exclude-from <(find ./test -type f -size +3c)
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf ax.tar.gz ./test --exclude-from <(find ./test -type f -size +3c) --exclude '*\[*'
./test/
./test/a1.txt

答案3

如果你尝试通过 SSH 在服务器上执行此操作,则它将无法工作,因为。要解决这个问题,您可以使用管道和 xargs:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar

相关内容