Ubuntu命令行压缩目录时如何排除指定子目录
在Ubuntu命令行压缩目录并排除子目录的解决方案
嘿,我来帮你搞定这个问题!在Ubuntu系统里,tar命令是处理目录压缩最常用的工具,只要用对参数,轻松就能排除不需要的子目录。下面给你详细讲用法和常见坑点:
一、基础命令格式
核心思路是用tar的--exclude参数指定要排除的子目录,基本格式如下:
tar -czvf 输出压缩包名.tar.gz 要压缩的目标目录 --exclude=需要排除的子目录路径
参数解释:
-c:创建新的压缩包-z:用gzip格式压缩(生成.gz后缀的包)-v:显示压缩过程的详细信息(可选,方便看进度)-f:指定输出的压缩包文件名
二、实际例子演示
假设你要压缩/home/efren/my_workspace目录,需要排除里面的node_modules(依赖目录)和temp(临时文件目录)两个子目录,分两种情况:
1. 使用绝对路径
如果不确定当前工作目录,用绝对路径最稳妥,不会出错:
tar -czvf my_workspace.tar.gz /home/efren/my_workspace --exclude="/home/efren/my_workspace/node_modules" --exclude="/home/efren/my_workspace/temp"
2. 使用相对路径
如果你已经在/home/efren目录下(也就是目标目录的上级目录),可以用相对路径,更简洁:
tar -czvf my_workspace.tar.gz my_workspace --exclude="my_workspace/node_modules" --exclude="my_workspace/temp"
三、批量排除多个目录(适合排除列表长的情况)
如果要排除的子目录很多,重复写--exclude太麻烦,可以先创建一个排除列表文件:
- 新建
exclude_list.txt,每行写一个要排除的路径:
my_workspace/node_modules my_workspace/temp my_workspace/logs my_workspace/build
- 然后用
--exclude-from参数指定这个文件:
tar -czvf my_workspace.tar.gz my_workspace --exclude-from=exclude_list.txt
四、常见坑点(之前命令无效可能是踩了这些)
- 路径要准确:不能只写目录名(比如只写
node_modules),否则tar会排除所有同名的目录,而且如果路径不匹配,排除会失效。一定要和目标目录的路径对应起来。 - 参数顺序不能错:
--exclude参数必须放在要压缩的目标目录后面,如果放在前面,命令会不生效。比如错误写法:tar -czvf my_workspace.tar.gz --exclude="node_modules" my_workspace,这种就不会正确排除。 - 注意引号:如果排除的路径里有空格,一定要用引号包裹(比如
--exclude="my workspace/temp files"),避免被解析成多个参数。
内容的提问来源于stack exchange,提问作者Efren
相关产品推荐
相关产品推荐

