Windows下tar命令仅排除当前目录指定文件夹、保留子目录同名文件夹的实现方法咨询
Windows下tar命令仅排除当前目录指定文件夹、保留子目录同名文件夹的实现方法咨询
嗨,我来帮你解决这个问题!你遇到的情况是因为Windows环境下的tar对--exclude参数的路径匹配逻辑和类Unix系统略有差异,直接用--exclude "./two"会匹配所有路径中包含./two的条目,包括子目录里的./one/two,所以才会把它们一并排除。
要精准只排除当前目录下的two文件夹,同时保留子目录里的同名文件夹,你可以试试以下两种方法:
方法1:使用正则锚点精确匹配
利用正则表达式的开头和结尾锚点,限定只匹配当前目录下的two目录,命令如下:
tar --exclude "^./two$" -c -f ../test.tar .
这里的^代表路径起始位置,$代表路径结束位置,^./two$会严格匹配当前目录下的two目录,不会对./one/two这类子目录生效。
方法2:通过目录后缀区分匹配
你也可以给路径加上目录结尾的斜杠,明确指定要排除的是当前目录下的two目录本身,同时兼顾Windows的路径分隔符特性,命令如下:
tar --exclude "./two/" --exclude ".\two\" -c -f ../test.tar .
这种写法会精准匹配当前目录下的two目录,不会牵连到子目录里的同名文件夹。
执行完上面的命令后,你再用tar -t -f ../test.tar查看打包内容,应该就能看到结果符合预期:保留./one/、./one/two/以及里面的文件,只排除当前目录下的./two/和它的内容。
备注:内容来源于stack exchange,提问作者triatic
相关产品推荐
相关产品推荐

