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


11

我要存档的文件(含tar)小于3 MB。但我也想保留这些文件所在的目录。(所以我不能使用find命令)。我只想避免文件大小超过3 MB。如何才能做到这一点?


2
那你为什么不能find再次使用?
伊格纳西奥·巴斯克斯

find命令可以保持目录完整吗?
nixnotwin

Answers:


23

比您想象的简单:

$ 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
+1什么!SF上有礼貌,友善的人吗?
Jongosi 2014年

1
+1同样的沉积物。SF上最近有太多自私的巨魔。
Patoshiパトシ2016年

*观点:P :)
MikeyB '16

1

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

$ 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

0

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

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.