Tar除了某个特定目录的目录

时间:2016-05-23 18:42:18

标签: linux bash unix

我使用tar在Linux中执行一项棘手的任务。你能救我一下吗?

以下是我的目录结构。名为Harry的目录包含下面提到的文本文件和目录。

Harry/
   -> file1.txt
   -> file2.txt
   -> file3.txt
   -> chocobar/
   -> restobar/
   -> bluebar/
   -> direct1/

我的主要任务是编写一个脚本,将Harry的所有文件和目录放入名为“smallHarry.tar.gz”的包中。但是,脚本的一个参数包含上面提到的任何“bar”目录。排除所有其他'bar'目录,应该创建tar。

例如:如果我提供“./myscript restobar”,则tar应包含所有文件,然后仅包含“restobar/”和“direct1 /”目录。必须排除所有其他包含'bar'字符串('chocobar'和'bluebar')的目录。

我知道我可以做“tar -zcvf Harry/ * -exclude 'chocobar' -exclude 'bluebar'”。但我想要一个通用脚本。因为字符串'bar'的目录将来会增加,而且每次我得到一个带有字符串'bar'的新目录时我都不想更新脚本。

1 个答案:

答案 0 :(得分:1)

忽略所有文件夹并手动添加所需文件夹怎么样?这些方面的东西:

脚本:

find Harry/ -maxdepth 1 -type f | xargs tar -zcvf ${2} Harry/${1}

正在运行./script.sh restobar test

Harry/restobar/
Harry/restobar/2/
Harry/file2.txt
Harry/file1.txt

结构Harry/

Harry/
├── bluebar
├── chocobar
│   └── 1
├── file1.txt
├── file2.txt
└── restobar
    └── 2

生成的tar:

drwxrwxr-x reut/reut         0 2016-05-23 21:56 Harry/restobar/
drwxrwxr-x reut/reut         0 2016-05-23 21:56 Harry/restobar/2/
-rw-rw-r-- reut/reut         0 2016-05-23 21:48 Harry/file2.txt
-rw-rw-r-- reut/reut         0 2016-05-23 21:48 Harry/file1.txt