我想搜索几个“日期”子文件夹中的所有 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*