在创建tarball时排除常见的子目录。
在创建tarball时排除常见的子目录。
我正在创建一个管理在ClearCase中的大型代码库的tarball。每个目录都有一个名为\".CC\"的子目录。我想将这些目录排除在我的tarball之外。\n我找到了在创建.tar.gz文件时排除目录,但是排除这些目录似乎需要在命令行上传递每个\".CC\"目录。在我的情况下,这是不切实际的。\n有没有办法排除符合特定模式的目录?\n编辑:\n我不是在问如何排除一个特定的有限目录列表。我在问如何排除所有以特定模式结尾的目录。
问题的原因是需要在创建tarball时排除常见的子目录。解决方法是使用下面的bash脚本:
#!/bin/bash echo -n "Please enter the name of the tar file you wish to create with out extension " read nam echo -n "Please enter the path to the directories to tar " read pathin echo tar -czvf $nam.tar.gz excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs` echo $pathin echo tar -czvf $nam.tar.gz $excludes $pathin
这段脚本会打印出所需的命令,您可以直接复制粘贴到命令行中。可能还有一种更优雅的方法可以直接提供给命令行。
*.CC可以替换为任何其他常见的扩展名,这个脚本应该仍然有效。
从上述内容中可以整理出以下文章:
标题:在创建tar压缩包时排除常见子目录的原因及解决方法
在创建tar压缩包时,有时候我们希望排除一些常见的子目录,以减少压缩包的大小或简化文件结构。然而,手动输入排除的子目录路径可能会变得繁琐且容易出错。因此,我们需要寻找一种更简便和可靠的方法来实现这一目标。
解决方法是使用一条命令,通过使用find
命令配合xargs
命令来排除常见子目录。具体来说,可以使用以下命令来排除子目录:$(find root -type d -name .CC -exec echo "--exclude \'{}\'" \;|xargs)
。
在这条命令中,find
命令的参数root
表示要搜索的根目录,-type d
表示只搜索目录,-name .CC
表示搜索名称为.CC的目录。然后,-exec
参数指定要执行的操作,这里是echo "--exclude \'{}\'"
,即输出符合条件的目录路径并添加"--exclude"前缀。最后,通过xargs
命令将输出的路径作为参数传递给tar命令。
此外,find
命令还支持各种模式匹配,甚至可以在find
和xargs
之间使用grep
等命令进行筛选。
通过使用上述解决方法,我们可以更方便地排除常见的子目录,使得创建的tar压缩包更加简洁和高效。