如何把所有没有AAA' AAA的文件夹放到或者' BBB'在名称中成为一个zip文件? Linux的

时间:2014-07-23 04:27:12

标签: linux zip tar

在当前文件夹中,我有很多子文件夹,并且文件中包含文件。如何将名称中没有AAABBB的文件夹放入.zip文件中?

123AAAcc
  123.txt
  BBB.csv
222BBBss
  ...
ADFAAA
  BBB
    adsf.txt
vvBB
  111.mov
  BBB.avi

我尝试了以下内容,但它也排除了vvBB\BBB.aviADFAAA\BBB\*。我想保留这些。

tar -zcvf test.tgz --exclude='*AAA*' --exclude='*BBB*' .

问题是,如何让--exclude只能处理1级子文件夹名称,但递归地处理所有文件名和文件夹名称?

希望我有一个包含以下内容的.zip文件:

vvBB
  111.mov
  BBB.avi

我想将此作为一个命令行来实现。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以通过将以下命令链接在一起来完成此行为:

ls将列出当前目录中的所有文件和文件夹。

grep -v "\(.*BBB.*\)\|\(.*AAA.*\)"查找具有AAA或BBB的所有名称(由任何内容包围),然后(使用-v)排除它们并返回所有其他结果。

xargs tar -cvzf test.tgz将从管道中获取参数并将其应用于tar。总之,你得到:

ls | grep -v "\(.*BBB.*\)\|\(.*AAA.*\)" | xargs tar -cvzf test.tgz

我得到的部分结果是:

$ ls
123AAAcc
222BBBss
ADFAAA
vvBB
$ ls | grep -v "\(.*BBB.*\)\|\(.*AAA.*\)"
vvBB
$ ls | grep -v "\(.*BBB.*\)\|\(.*AAA.*\)" | xargs tar -cvzf test.tgz
a vvBB
a vvBB/111.mov
a vvBB/BBB.avi