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

use*_*182 18 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
Run Code Online (Sandbox Code Playgroud)

我们还尝试将 exclude= 参数括在单引号和双引号中,但没有成功。

tar -vczf archive.tar.gz . --exclude='wp-content/uploads/wpallimport/files/*'
tar: Cowardly refusing to create an empty archive
Run Code Online (Sandbox Code Playgroud)

官方网站上显示--exclude没有等号

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

这是怎么做的?

ste*_*ver 26

tar's--exclude选项的常见问题是它是相对于目录参数的,例如给定

$ tree dir
dir
??? subdir
    ??? subsubdir
        ??? file1
        ??? file2
        ??? file3

2 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

然后

$ 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
Run Code Online (Sandbox Code Playgroud)

未能排除的内容subsubdir(它试图排除dir/dir/subdir/subsubdir/*,它不匹配任何东西);你想要的是

$ tar cvf dir.tar.gz --exclude='subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/
Run Code Online (Sandbox Code Playgroud)

AFAIK 除了输出文件必须立即遵循f选项之外,顺序无关紧要。

  • 对我来说,当我去掉排除目录周围的引号时,这有效(`--exclude=subdir/subsubdir/*`) (2认同)

小智 6

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

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