Delete all files in a directory using Chef

DonBecker picture DonBecker · Apr 18, 2014 · Viewed 18.8k times · Source

Attempting to delete a non-empty folder:

directory "C:\tempdirectory" do
 action :delete
end

... in Chef I receive:

Errno::ENOTEMPTY
Directory not empty

Is there a quick way to delete all files in the directory?

Or an argument or flag to allow me to delete non-empty directories?

Answer

Patrick M picture Patrick M · Apr 18, 2014

If I recall correctly, setting the recursive true attribute will force remove non-empty directories.

The docs for the directory LWRP don't describe this behavior, but they do provide this usage example:

directory "/tmp/something" do
  recursive true
  action :delete
end

The docs have since been amended to cryptically say:

recursive
Ruby Types: TrueClass, FalseClass

Create or delete parent directories recursively. For the owner, group, and mode properties, the value of this attribute applies only to the leaf directory.
Default value: false.

They still stop short of saying "recursive true is required to delete non-empty directories. Without this setting, attempting to delete a non-empty directory will fail with the message: Errno::ENOTEMPTY Directory not empty".