昨天晚上一网友问我

1
2
3
4
  
tar -cvpzf /sdcard/test.tgz --exclude=/sdcard/test/test2/* /sdcard/test

  

此命令中的 –exclude选项为什么不起作用

我看了这个的么一反映,不可能啊,命令完全没有错误,应该是可以执行的,遂在网上找了找答案。

看到CU论坛上面有朋友说

tar的–exclude用的不是正则表达式,而是wildcards

叫朋友改成

1
2
3
4
  
tar -cvpzf /sdcard/test.tgz --exclude=/sdcard/test/test2/ /sdcard/test

  

还是不行。。

又在另一帖子中看到,这个问题;

有一个tar命令如下:
tar -cvpzf /media/sda7/backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/mnt –exclude=/sys –exclude=/media /

本意是想备份根目录下的除了/proc /lost+found /mnt /sys /media 这些目录之外的文件的,但是没有起到作用,我想知道为什么???请高手给一个解释,谢谢了。

这个问题基本上跟我他的问题一样了,遂看各位前辈们的回复,里面成功的的有:

应该是:
tar -cvpzf /media/sda7/backup.tgz / –exclude=/proc –exclude=/lost+found –exclude=/mnt –exclude=/sys –exclude=/media
复制代码
–exclude需要放到最后,否则无效

这是一个固定格式 tar -jcvpf target source

没查到 man 中有相关说明啊,倒是有:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
> 
> 
>   
> tar -cf scr.tar --exclude='*.o' scr"
> 
>   
> 
> ```  
> 那可能与 tar 版本有关了。  
>   
> 确实没错  这句话说到点子上了!  
> 以前习惯linux下 选项 最后写 用了BSD 发现了这个问题  
> 比如在Linux下,ls -l test.txt和ls test.txt -l都是可以的,而BSD下只能写成前一种。  
>   

  
在最后,版主得出,exclude选项 跟tar的版本有关,不过从此贴里面可以看到 下面这种方式执行是成功的  
  

tar -cvpzf /media/sda7/backup.tgz / –exclude=/proc –exclude=/lost+found –exclude=/mnt –exclude=/sys –exclude=/media

1
2
即:  
  

tar -cvpzf target source –exclude=

```
这种格式在我的vps上面也测试成功,不过还是请大家在使用这个命令的时候,先看一看man手册。

另外给出CU论坛的关于这个问题的链接吧。

http://bbs.chinaunix.net/thread-3761777-1-1.html