我有一个棘手的任务要在Linux中使用tar执行。你能帮我吗?
下面是我的目录结构。名为 Harry 的目录包含下面提到的文本文件和目录。
Harry/
-> file1.txt
-> file2.txt
-> file3.txt
-> chocobar/
-> restobar/
-> bluebar/
-> direct1/
我在这里的主要任务是编写一个脚本,将哈利的所有文件和目录压缩到一个名为"smallHarry.tar.gz"的包中。但是,脚本的一个参数包含上述任何"bar"目录。排除所有其他"bar"目录,应创建 tar
。例如:如果我给出" ./myscript restobar
",tar
应该包括所有文件,然后只包含" restobar/
"和"direct1/"目录。必须排除所有其他带有"bar"字符串("chocobar
"和"bluebar
")的目录。
我知道我可以做到"tar -zcvf Harry/ * -exclude 'chocobar' -exclude 'bluebar'
"。但我想要一个通用脚本。因为带有字符串"bar"的目录将来会增加,我不想每次获得带有字符串"bar"的新目录时都更新脚本。
忽略所有文件夹并手动添加所需的文件夹怎么样?大致如下:
脚本:
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
生成的焦油:
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