2017-09-15 1 views
0

실제 상위 디렉토리를 삭제하지 않고 디렉토리의 내용 만 삭제할 수있는 방법이 있습니까? 재귀 및 작업 삭제를 사용하면 실제 상위 디렉토리도 삭제됩니다.요리사를 사용하여 디렉토리 내용 만 삭제

경로를 C : \ chef \ mydir로 지정하면이 dir (파일 및 하위 디렉토리)의 모든 내용을 삭제해야하며 기본적으로 비워야합니다. 나는 Windows 환경에 있습니다.

올바른 방향으로 인도 해 주시면 감사하겠습니다.

답변

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에 관한 것입니다). 파일 리소스 경로의 globs ('*')는 작동하지 않습니다. – coderanger

+0

귀하의 코멘트를 주셔서 감사합니다, 창문 요리사를 사용하지 마십시오 :) – Berlin

0

셰프에 대한 제한된 지식으로 전체 디렉토리를 삭제하는 방법과 새로운 디렉토리를 만드는 방법을 알고 있었기 때문에 다음과 같이했습니다. 접근 방법은 디렉토리를 지우고 "비우기"대신에 동일한 디렉토리를 재생성하는 것이 었습니다. 이것은 미숙 한 일이지만 내 목적을 달성했습니다.

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

작성 조치는 삭제 조치 및 "디렉토리가 있어야 함"조건을 만족해야만 실행됩니다. 이렇게하면 디렉토리를 "비우는"것이 궁극적 인 목적이므로 서버에서 디렉토리가 불필요하게 생성되지 않도록 할 수 있습니다.