无法将查找结果中的文件获取到 tar 文件中

无法将查找结果中的文件获取到 tar 文件中

下面是我的 find 命令,它搜索并将搜索到的文件结果转储到/tmp/findall.log

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o -print | tee  /tmp/findall.log

我可以在查找结果中看到阶段文件夹,如下所示:

grep stage /tmp/findall.log | more
/app/test/Server2/stage_02032020
/app/test/Server2/stage_02032020/Buyers
/app/test/Server2/stage_02032020/Buyers/BuyersQuote.xlsx
/app/test/Server2/stage_02032020/Buyers/xml

find然后,我决定使用以下命令压缩结果中找到的文件。

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs -0 tar -cvf /app/test_Backup.tar

但是,我的 tar 文件没有阶段文件夹,如下所示的查找结果所示。

tar -tvf test_Backup.tar | grep stage
No results Found.

您能否建议为什么 tar 文件中缺少查找结果中的文件?

答案1

可能是“发现”它传递了一个空字符串或类似的东西,您可以使用“--no-run-if-empty”进行故障排除,然后不应创建 tar 。

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs --no-run-if-empty -0 tar -cvf /app/test_Backup.tar

顺便说一句,你的代码在我的树莓派上运行。 GNU bash,版本 4.4.19(1)-release (armv7hl-redhat-linux-gnu)

答案2

如果你的find命令正在生成许多路径名,那么xargs很可能会执行tar多次。每次执行tar都会覆盖上次执行时创建的存档tar,因此最终您会留下一个由最后一批find找到的文件组成的存档。

假设您在 AIX 上(正如您将上一个问题标记为),您想要做的可能是将路径写入文件,然后将该文件与tar -L listfile-L选项tar在 AIX 上给出一个包含要归档的路径名的列表文件)。

find ...as you had... >listfile
tar -cf archive.tar -L listfile

由于我无法访问 AIX 系统,因此我无法对此进行测试。

相关内容