我正在使用以下命令
find . -type f -exec sed -i 's/_backpack.html/_backpack_cal.html/g' {} +
我希望项目中的所有“_backpack.html”字符串都替换为_backpack_cal.html
,并且会发生这种情况。
但是,问题是它还会编辑我的.git
目录中的文件,这会损坏 Git。如何在处理所有其他子目录的同时防止find
触摸我的目录?.git
答案1
你可以使用:
find . -name .git -prune -o -type f -exec sed -i 's/_backpack.html/_backpack_cal.html/g' {} +
我添加的-name .git -prune
部分基本上意味着“如果目录的名称是.git
,则不处理该目录。”
另外,请注意添加的-o
(意思是or
),它仅在第一个为 false 时才执行您的语句(即,如果处理的文件的名称是目录.git
)。
当然,您应该在实际执行命令之前对此进行测试,例如将-exec ...
部分替换为。-print
答案2
如果您只想排除.git
:
find . ! -path '.git/*' -type f
要排除所有隐藏文件和目录:
find . ! -path '*/.*' -type f