我有一个包含超过 200k 个文件的文件夹。我只想归档以某个名称开头的文件(文件名非常大)。例子sudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -czf logs_rate.tgz
。
然而,我时不时会收到这样的消息:tar:从成员名称中删除前导“/”并且存档重置为 0 并重新开始。在该过程结束时,我总共 22000 个文件中只有大约 25 个文件。我错过了什么或者我做错了什么?
答案1
正如评论已经表明的那样,tar
由 运行多次xargs
。处理此问题的最明显方法是将文件附加到存档中,而不是从头开始重新创建存档。
sudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -rf logs_rate.tar
然后压缩。
关于领导的言论/
只是一个警告。
答案2
我找到了一个解决方法。将命令拆分为 2 个不同的部分,以绕过长名称和大内容。
sudo find /path/to/_Logs -name "RATE*" > test1.txt
tar -czvT test1.txt -f logs.tgz
答案3
不要将 xargs 与 tar 一起使用。没有必要这样做。
Gnu/tar(我相信其他 tars)有一个选项-T
(长格式--files-from
:)从副文件中读取无限数量的文件名。 (您还可以使用 来通过 stdin 发送它们-T -
。)
可以使用该--null
选项,以便-T
列表可以包含以 null 结尾的字符串,就像xargs
(并且出于相同的原因)。
-T
可以使用多个选项。请注意,以 开头的路径名-
仍然是一个问题:该-T
选项仅仅是命令行上名称列表的缩写:它可以包含其他选项,例如-C
.