搜索和 tar 文件是否尊重文件夹结构?

搜索和 tar 文件是否尊重文件夹结构?

我想搜索几个“日期”子文件夹中的所有 csv 文件,然后将它们压缩并保留该结构,因为日期仅位于文件夹级别,而不是文件级别。所以,例如我有

20200101
   A.csv
   B.py
20200102
   G.csv
   D.csv
   F.c

所以,我想tar

20200101
   A.csv
20200102
   G.csv
   D.csv

我试过了:

ls 20200*/<some regex>.* | xargs -n1 tar -vczf odlists.tar.gz

但它只保存一个文件!

答案1

xargs -n1表示对每个参数执行命令。因此tar一次保存一个文件,每次都会覆盖以前的存档。

即使没有-n1,由于命令行长度限制,该命令也会很脆弱。如果所有参数不能同时容纳,则… | xargs tar …重复调用,并且每次重复调用都会覆盖前一个。tar

您可以使用 来创建包含一个(或多个)文件的存档tar -c,然后使用 重复追加到该文件中tar -r。这很尴尬,因为第一次没有方便的方法来传递不同的选项,并且您必须创建一个未压缩的存档,然后在最后压缩它。

如果您的 tar 支持该-T选项,您可以使用它在标准输入上传递文件名。这与 类似xargs,但没有命令行长度的限制。

printf '%s\n' 20200*/*.csv | tar -vczf odlists.tar.gz -T -

或者,假设您的 tar 支持过滤,您可以使用它。

tar -vczf odlists.tar.gz --exclude='*.' 2020*

相关内容