如何使用tar排除某个目录的所有文件?

客户端将文件上载到开发服务器。 当将项目上传到生产服务器时,不再需要这些文件,我们希望将它们从我们最终推向生产的tar文件中排除。 但是,我们仍然希望保持目录,只有不需要的文件

使用Ubuntu 16和tar 1.28,我们尝试过:

tar -vczf archive.tar.gz . --exclude=wp-content/uploads/wpallimport/files/* tar: Cowardly refusing to create an empty archive 

我们还尝试在单引号和双引号中包含exclude =参数,没有运气。

 tar -vczf archive.tar.gz . --exclude='wp-content/uploads/wpallimport/files/*' tar: Cowardly refusing to create an empty archive 

官方网站显示 – 没有等号的排除

tar -vczf file.tar.gz --exclude 'directory/*' . 并给出相同的错误。

这是怎么做到的?

tar--exclude选项的常见问题是它与目录参数相关,例如给定

 $ tree dir dir └── subdir └── subsubdir ├── file1 ├── file2 └── file3 2 directories, 3 files 

然后

 $ tar cvf dir.tar.gz --exclude='/dir/subdir/subsubdir/*' dir dir/ dir/subdir/ dir/subdir/subsubdir/ dir/subdir/subsubdir/file1 dir/subdir/subsubdir/file2 dir/subdir/subsubdir/file3 

无法排除subsubdir的内容(它试图排除dir/dir/subdir/subsubdir/* ,它与任何东西都不匹配); 你想要的是什么

 $ tar cvf dir.tar.gz --exclude='subdir/subsubdir/*' dir dir/ dir/subdir/ dir/subdir/subsubdir/ 

除非输出文件必须紧跟f选项,否则AFAIK顺序无关紧要。

假设您有一个名为“top-dir”的目录,其子文件夹为“dir / subdir”。 如果要排除目录“dir / subdir”的内容而不是目录本身的内容,实际工作的命令行是tar -zcp --exclude='dir/subdir/*' -f archive.tgz top-dir

您必须在--exclude 1之后和归档文件名之前使用-f开关。