使用chef删除目录内容

时间:2017-09-15 08:01:10

标签: windows chef

有没有办法只删除目录内容而不删除实际的父目录?当我使用递归和动作删除时,实际的父目录也会被删除。

如果我指定路径C:\ chef \ mydir,则必须删除此dir(文件和子目录)的所有内容,基本上清空。我在Windows环境中。

非常感谢任何正确方向的指导。

4 个答案:

答案 0 :(得分:1)

在linux中,您可以运行类似rm -r dir/**/*的内容来删除目录中的所有文件。这不会删除父目录。您可以将此添加到厨师食谱。

答案 1 :(得分:1)

我不确定Windows,但您可以尝试:

  

操作此资源具有以下操作:

     

:无   阻止命令运行。这个动作习惯了   指定仅在另一个资源通知它时运行命令。

     

:运行默认值。   运行命令。

execute "delete_files" do
  command "del /s /q /F *"
  cwd "C:\chef\mydir"
end

删除单个文件:

file 'delete_files' do
  path 'C:\\chef\\mydir\\my.file'
  action :delete
end

如果有效,请告诉我。

答案 2 :(得分:1)

在Chef(甚至只是在原始Ruby中)中执行此操作并不是一个很好的方法。您可以通过我的代码填写:https://github.com/poise/poise-archive/blob/master/lib/poise_archive/archive_providers/base.rb#L115-L119

只需将其放入ruby_block即可,你应该没问题。

答案 3 :(得分:1)

由于我对Chef的了解有限,我做了以下工作,因为我知道如何删除整个目录以及如何创建新目录。采取的方法是删除目录,然后重新创建相同的目录,而不是尝试“清空”它。这可能很粗糙,但它符合我的目的。

directory my_temp_dir do
recursive true
action [:delete, :create]
only_if {::Dir.exist?(my_temp_dir)}
end

只有在删除操作和必须满足条件“目录必须存在”之后才会执行create操作。这样,我们可以确保不会在服务器上不必要地创建目录,因为最终目标是“清空”目录。