在当前文件夹中,我有很多子文件夹,并且文件中包含文件。如何将名称中没有AAA
或BBB
的文件夹放入.zip文件中?
123AAAcc
123.txt
BBB.csv
222BBBss
...
ADFAAA
BBB
adsf.txt
vvBB
111.mov
BBB.avi
我尝试了以下内容,但它也排除了vvBB\BBB.avi
和ADFAAA\BBB\*
。我想保留这些。
tar -zcvf test.tgz --exclude='*AAA*' --exclude='*BBB*' .
问题是,如何让--exclude
只能处理1级子文件夹名称,但递归地处理所有文件名和文件夹名称?
希望我有一个包含以下内容的.zip文件:
vvBB
111.mov
BBB.avi
我想将此作为一个命令行来实现。我怎么能这样做?
答案 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