linux tar 命令打包文件夹问题

时间:2022-08-22 21:34:00
目录结构如下

   test
     |-a   空目录
     |-b   空目录
     |-c   有文件
     |-d   
 
 我使用tar命令打包test目录 想过滤掉空目录a、b、d
 我想到的是 tar -zcvf test.tar.gz --exclude=`find test -type d -empty` test  
 打包以后发现只是过滤掉了a目录而b、d目录并没有被过滤。那位大神帮我看看。

我猜 find 命令是发现a是空目录就返回结果,然后tar命令就开始打包,导致b、d没有被过滤

不知道这个猜想是否正确

如果单独执行  find test -type d -empty 就会列出a、b、d是空目录

各位大神帮忙看看,急用啊  googe很久了。

7 个解决方案

#1


》如果单独执行  find test -type d -empty 就会列出a、b、d是空目录

所以find没有问题。
是你用法不当,--exclude不接受find返回的那种结果。处理下再给exclude试试。

#2


引用 1 楼 21bird 的回复:
》如果单独执行  find test -type d -empty 就会列出a、b、d是空目录

所以find没有问题。
是你用法不当,--exclude不接受find返回的那种结果。处理下再给exclude试试。

高人能否指点1,2啊

#3



tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test

#4


引用 3 楼 21bird 的回复:

tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test


++++++

主要是因为楼主的--exclude=a b c是多个命令行参数了,需要分别使用--exclude才对。

#5


真是让我汗颜呐

#6


引用 4 楼 qq120848369 的回复:
Quote: 引用 3 楼 21bird 的回复:


tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test


++++++

主要是因为楼主的--exclude=a b c是多个命令行参数了,需要分别使用--exclude才对。


顶一个

#7


tar zcvf test.tar.gz `find test/* -type d -not -empty`
换个思路应该可以

#1


》如果单独执行  find test -type d -empty 就会列出a、b、d是空目录

所以find没有问题。
是你用法不当,--exclude不接受find返回的那种结果。处理下再给exclude试试。

#2


引用 1 楼 21bird 的回复:
》如果单独执行  find test -type d -empty 就会列出a、b、d是空目录

所以find没有问题。
是你用法不当,--exclude不接受find返回的那种结果。处理下再给exclude试试。

高人能否指点1,2啊

#3



tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test

#4


引用 3 楼 21bird 的回复:

tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test


++++++

主要是因为楼主的--exclude=a b c是多个命令行参数了,需要分别使用--exclude才对。

#5


真是让我汗颜呐

#6


引用 4 楼 qq120848369 的回复:
Quote: 引用 3 楼 21bird 的回复:


tar -zcvf test.tar.gz `find test -type d -empty | awk '{ printf("--exclude=%s ", $1) }'` test


++++++

主要是因为楼主的--exclude=a b c是多个命令行参数了,需要分别使用--exclude才对。


顶一个

#7


tar zcvf test.tar.gz `find test/* -type d -not -empty`
换个思路应该可以