2017-09-15 17 views
0

実際の親ディレクトリを削除せずにディレクトリの内容のみを削除する方法はありますか?再帰とアクションの削除を使用すると、実際の親ディレクトリも削除されます。シェフを使用してディレクトリの内容のみを削除する

私がパスC:\ chef \ mydirを指定した場合、このdir(ファイルとサブディレクトリ)の内容はすべて削除されなければならず、基本的には空になります。私はWindows環境です。

適切な方向へのガイダンスは非常に高く評価されます。

答えて

1

シェフで(または生のRubyでさえ)これを行うには素晴らしい方法はありません。あなたは私のコードからベビーベッドを使うことができます:https://github.com/poise/poise-archive/blob/master/lib/poise_archive/archive_providers/base.rb#L115-L119

ちょうどそれをruby_blockに入れて、大丈夫です。

+0

ありがとう。このアプローチは、ディレクトリを "空にする"ために働いていました。 – nnair900

1

rm -r dir/**/*のようなディレクトリを実行すると、ディレクトリ内のすべてのファイルを削除できます。親ディレクトリは削除されません。これをシェフのレシピに追加することができます。

1

私は窓わからないですが、あなたは試すことができます:

アクションこのリソースは、次のアクションがあります。

:何 防止実行したコマンドを実行します。このアクションは、 に使用され、別のリソースが通知するときにのみコマンドが実行されるように指定します。

:デフォルトを実行します。 コマンドを実行します。

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 

はそれが動作するかどうか私に教えてください。

+0

これらのほとんどは良い考えではありません。 windows_pathはディレクトリとは何の関係もありません($ PATH env varについてです)、ファイルリソースパスのグロブ( '*')は動作しません。あなたのコメントのために – coderanger

+0

ありがとう、シェフを窓で使ったことはありません:) – Berlin

0

シェフの限られた知識で、私はディレクトリ全体を削除する方法と新しいディレクトリを作成する方法を知っていたので、以下のことを行いました。取られたアプローチは、ディレクトリを "空にする"のではなく、同じディレクトリを削除して再作成することでした。これは粗悪かもしれませんが、それは私の目的に役立ちました。

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

作成アクションは、削除アクションと条件 "ディレクトリが存在する必要があります"が満たされている必要がある場合にのみ実行されます。このようにして、最終的な目的はディレクトリを "空にする"ことであるため、ディレクトリ上にディレクトリが不必要に作成されないようにすることができます。

関連する問題