cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
我在别处找到了这个解决方案,所以不会自己拍胸脯说是本人的功劳。但是对于我的Mac特定问题,它比上面所有的解决方案都要好(即使这个问题已经关闭):
tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>
对于Mac OSX系统,我需要执行以下操作:
tar -zcv --exclude='文件夹名' -f 输出的压缩包名.tar 需要压缩的文件夹名
请注意在--exclude=
之后加上-f
参数。
对于那些遇到问题的人来说,一些 tar 版本在排除值中不使用 './' 才能正常工作。
Tar --version
tar(GNU tar)1.27.1
可用的命令语法:
tar -czvf ../allfiles-butsome.tar.gz * --exclude=acme/foo
这些不起作用:
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=./acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='./acme/foo'
$ tar --exclude=./acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='./acme/foo' -czvf ../allfiles-butsome.tar.gz *
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=/full/path/acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='/full/path/acme/foo'
$ tar --exclude=/full/path/acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='/full/path/acme/foo' -czvf ../allfiles-butsome.tar.gz *
我认为使用 --exclude 标志是正确的方法。
$ tar --exclude='./folder_or_file' --exclude='file_pattern' --exclude='fileA'
一个警告词语,有一个并不显然的副作用:在这个例子中排除文件A将会递归地搜索文件A!
例如:一个包含同名文件(data.txt)的单个子目录的目录。
data.txt
config.txt
--+dirA
| data.txt
| config.docx
如果使用--exclude='data.txt'
,档案将都不包含 data.txt 文件。 如果要归档第三方库(例如 node_modules 目录),这可能会导致意外的结果。
为避免这种情况,请确保给出完整路径,如--exclude='./dirA/data.txt'
。
tar cvpzf abc.tgz abc/ --exclude='abc/error' --exclude='abc/logs'
tar cvpzf abc.tgz abc/ --exclude='abc/error/*' --exclude='abc/logs/*'
find ... | xargs ...
而导致可能出现的 'xargs: Argument list too long'
错误,您可以将 find
的输出直接传输到 tar
中,使用命令 find ... -print0 | tar --null ...
。# archive a given directory, but exclude various files & directories
# specified by their full file paths
find "$(pwd -P)" -type d \( -path '/path/to/dir1' -or -path '/path/to/dir2' \) -prune \
-or -not \( -path '/path/to/file1' -or -path '/path/to/file2' \) -print0 |
gnutar --null --no-recursion -czf archive.tar.gz --files-from -
#bsdtar --null -n -czf archive.tar.gz -T -
xargs -n 1
是避免 xargs: Argument list too long
错误的另一种选项 ;) - Tuxdude根据您的需求,您还可以使用以下"--exclude-tag"选项之一:
将排除指定文件所在的文件夹。
tar -cvzf destination_folder source_folder -X /home/folder/excludes.txt
-X表示一个文件,其中包含必须从备份中排除的文件名列表。例如,您可以在此文件中指定*〜,以不包括任何以〜结尾的文件名在备份中。
tar cXvfJ EXCLUDE-LIST ARCHIVE.tar.xz SOURCE-FOLDER
。 - Kai Petzkegnu tar v 1.26版本中,--exclude命令需要紧随归档文件和备份目录参数之后,并且不应该包含前导或后缀斜杠,并且最好不要使用引号(单引号或双引号)。因此,相对于将要备份的PARENT目录,命令如下:
tar cvfz /path_to/mytar.tgz ./dir_to_backup --exclude=some_path/to_exclude
tar (GNU tar) 1.28
命令中基本上是一样的。 - PicoutputClsfind /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} \;