为什么*.zip
模式不起作用tar
:
tar cfjv backup.tar.bz2 --exclude mydir/files/*.zip mydir
还有其他语法吗?
答案1
您将需要引用排除模式 ,mydir/files/*.zip
否则 shell 将扩展它(通配符),可能/可能匹配多个文件,并且命令行的含义将与您的预期有很大不同。
这意味着将原始tar
命令行更改为
$ tar cfjv backup.tar.bz2 --exclude "mydir/files/*.zip" mydir
我最初以为开关出了问题cfjv
。这些是古老的命令行开关,tar
其处理方式与更“现代”的命令行开关(前缀为-
)非常不同。这就是你这样做的原因不是获取一个名为的存档,jv
即使这是f
切换后的内容。
Mac OS X的手册tar
在“兼容性”部分提到了这一点:
支持捆绑参数格式以与历史实现兼容。它由一个初始单词(没有前导 - 字符)组成,其中每个字符表示一个选项。参数后面作为单独的单词。参数的顺序必须与捆绑命令字中相应字符的顺序匹配。例如,
tar tbf 32 file.tar
指定三个标志 t、b 和 f。 b 和 f 标志都需要参数,因此命令行上必须有两个附加项。 32 是 b 标志的参数,file.tar 是 f 标志的参数。
答案2
要搜索当前目录和所有子目录中的所有 .zip 文件,请尝试:
查找 ./foldername -type f -name '*.zip'
要排除当前目录和所有子目录中的所有 .zip 文件,请尝试以下操作:
查找 ./foldername -type f -name '*.zip' > 排除.txt
要创建 tar 存档,不包括当前目录和所有子目录中的所有 .zip 文件,请尝试以下操作:
tar -zcvf 备份文件夹名称.tar.gz -X 排除.txt ./文件夹名称