有没有办法只删除目录内容而不删除实际的父目录?当我使用递归和动作删除时,实际的父目录也会被删除。
如果我指定路径C:\ chef \ mydir,则必须删除此dir(文件和子目录)的所有内容,基本上清空。我在Windows环境中。
非常感谢任何正确方向的指导。
答案 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操作。这样,我们可以确保不会在服务器上不必要地创建目录,因为最终目标是“清空”目录。