如何使用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
开关。