删除与chef中正则表达式匹配的所有文件

时间:2014-06-26 13:11:06

标签: chef

我希望我的厨师食谱删除与某个正则表达式匹配的所有文件。怎么办呢?

3 个答案:

答案 0 :(得分:10)

根据您的使用情况,以前的答案可能有效。但是,使用bash的本机删除功能并不是跨平台的。此外,根据您对资源的控制程度,您可能希望使用更类似Ruby的方法:

Dir["/path/to/folder/{YOUR_REGEX}"].each do |path|
  file ::File.expand_path(path) do
    action :delete
  end
end

这将在资源集合中为与正则表达式匹配的每个文件创建唯一条目。它也是幂等的(意思是如果文件已被删除则不会运行)和跨平台(它也适用于Windows)。

答案 1 :(得分:2)

您要执行此操作的方案是清除先前版本的配方中安装/设置的文件。

我发现这本食谱为这些清理目的提供了一些有用的食谱:https://github.com/nvwls/zap

zap_directory '/etc/sysctl.d' do
   pattern '*.conf'
end

zap_crontab 'root' do
  pattern 'test \#*'
end

zap_users '/etc/passwd' do
    # only zap users whose uid is greater than 500
    filter { |u| u.uid > 500 }
end

答案 2 :(得分:-1)

您可以在食谱中使用execute资源:

execute "Deleting files ... " do
    command "find . -regex 'REGEX' -delete"
    cwd "/path/to/folder"
    action :run
end

该命令需要具有find命令的目标系统。