【问题标题】:Tar a directory excluding a some particular directorytar 一个不包括某个特定目录的目录
【发布时间】:2016-05-23 18:42:17
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: linux bash unix


【解决方案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

生成的焦油:

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

【讨论】:

  • 这看起来不错。什么,如果目录“Harry/”包含更多的目录,如“direct1/”、“direct2/”(它们没有条形字符串)并且我希望这些目录也应该包含在 tar 中?
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多