Linux tar命令:压缩目录但排除子目录
场景:我在托管网站的服务器上有一个目录,其中包含数百个用户提交的图像。 我正在创建一个备份脚本,该脚本从目录中获取所有图像并将它们压缩到一个 .tar.gz 文件中。 到目前为止我的命令是:
tar -czpf /path/to/backups/my_backup.tar.gz 路径/to/images/
问题:我的path/to/images/中没有我有一个名为tmp/的目录。 当我运行该命令时,我得到一个 .tar.gz 文件,其中包含 path/to/images/ 目录中的所有图像和一个名为 tmp/ 的子目录。
问题:如何获取命令来跳过/不包含 .tar.gz 文件中的 tmp/ 子目录。
预先感谢一百万。
Scenario: I have a directory on a server that hosts my website that contains hundreds of user-submitted images. I am creating a backup script that takes all the images from the directory and compresses them into one .tar.gz file. The command I have so far is:
tar -czpf /path/to/backups/my_backup.tar.gz path/to/images/
Problem: No inside my path/to/images/ I have a directory called tmp/. When I run the command, I get a .tar.gz file containing all the image in the path/to/images/ directory and a subdirectory called tmp/.
Question: How can I get the command to skip/not include the tmp/ subdirectory in the .tar.gz file.
Thanks a million in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在寻找
--exclude
参数。一些用户发现
排除
选项令人困惑。 以下是一些常见的陷阱:tar
的主要运行模式不作用于路径名如果其文件名之一在命令行上明确列出
组件被排除在外。 在上面的示例中,如果您创建一个
归档并排除以
*.o
结尾但明确命名的文件列出所有选项后的文件
dir.o/foo
,dir.o/foo
将从归档中排除。有时您可能会混淆
--exclude=PATTERN
和--exclude-from=FILE-OF-PATTERNS
(-X FILE-OF-PATTERNS
)。 是小心:当要排除的文件位于
在命令行上以模式形式给出。 使用
--exclude-from=FILE-OF-PATTERNS
引入文件名其中包含模式列表,每行一个; 这些中的每一个
模式可以排除零个、一个或多个文件。
当您使用
--exclude=PATTERN
时,请务必引用PATTERN参数,因此 GNU
tar
会看到*
等通配符。 如果你不要这样做,shell 可能会使用文件扩展
*
本身手头上,因此
tar
可能会收到文件列表而不是一个模式,或者根本没有模式,使得该命令有些非法。
这可能与您想要的不符。
例如,写:
而不是:
regexp
语法,在
tar
中使用排除选项时。 如果您尝试使用regexp
语法来描述要排除的文件,您的命令可能会失败。
You are looking for the
--exclude
argument.Some users find
exclude
options confusing. Here are some common pitfalls:The main operating mode of
tar
does not act on a path nameexplicitly listed on the command line if one of its file name
components is excluded. In the example above, if you create an
archive and exclude files that end with
*.o
, but explicitly namethe file
dir.o/foo
after all the options have been listed,dir.o/foo
will be excluded from the archive.You can sometimes confuse the meanings of
--exclude=PATTERN
and--exclude-from=FILE-OF-PATTERNS
(-X FILE-OF-PATTERNS
). Becareful: use
--exclude=PATTERN
when files to be excluded aregiven as a pattern on the command line. Use
--exclude-from=FILE-OF-PATTERNS
to introduce the name of a filewhich contains a list of patterns, one per line; each of these
patterns can exclude zero, one, or many files.
When you use
--exclude=PATTERN
, be sure to quote the PATTERNparameter, so GNU
tar
sees wildcard characters like*
. If youdo not do this, the shell might expand the
*
itself using filesat hand, so
tar
might receive a list of files instead of onepattern, or none at all, making the command somewhat illegal.
This might not correspond to what you want.
For example, write:
rather than:
regexp
syntax, when using exclude options in
tar
. If you try to useregexp
syntax to describe files to be excluded, your commandmight fail.
这应该可以工作(假设 GNU tar):
This should work (assuming GNU tar):