<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Ant User Manual</title>
</head>

<body>

<h2><a name="delete">Delete</a></h2>
<h3>Description</h3>
<p>Deletes either a single file, all files in a specified directory and its 
sub-directories, or a set of files specified by one or more <a href="../CoreTypes/fileset.html">FileSet</a>s.
When specifying a set of files, empty directories are <i>not</i> removed by default.
To remove empty directories, use the <em>includeEmptyDirs</em> atribute.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">file</td>
    <td valign="top">The file to delete.</td>
    <td align="center" valign="middle" rowspan="2">at least one of the two</td>
  </tr>
  <tr>
    <td valign="top">dir</td>
    <td valign="top">The directory to delete files from.</td>
  </tr>
  <tr>
    <td valign="top">verbose</td>
    <td valign="top">Show name of each deleted file (&quot;true&quot;/&quot;false&quot;).
	 Default is &quot;false&quot; when omitted.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">quiet</td>
    <td valign="top">If the file does not exist, do not display a diagnostic 
     message or modify the exit status to reflect an error (unless Ant
     has been invoked with the -verbose or -debug switches).
     This means that if a file or directory cannot be deleted,
     then no error is reported. This setting emulates the 
     -f option to the Unix &quot;rm&quot; command.
     (&quot;true&quot;/&quot;false&quot;).
     Default is &quot;false&quot; meaning things are &quot;noisy&quot;.</td>
     Setting this to true, implies setting failonerror to false.
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">failonerror</td>
    <td valign="top">
    This flag (which is only of relevance if 'quiet' is false),
    controls whether an error -such as a failure to delete a file-
    stops the build task, or is merely reported to the screen.
    The default is &quot;true&quot;
    </td>
    <td align="center" valign="top">No</td>
  </tr>  
  <tr>
    <td valign="top">includeEmptyDirs</td>
    <td valign="top">Set to &quot;true&quot; to delete empty directories when
    using filesets.  Default is &quot;false&quot;.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">includes</td>
    <td valign="top"><i>Deprecated.</i>  Comma separated list of patterns of files that must be
      deleted. All files are in the current directory 
      and any sub-directories are deleted when omitted.</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">includesfile</td>
    <td valign="top"><i>Deprecated.</i>  The name of a file. Each line of this file is
      taken to be an include pattern</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">excludes</td>
    <td valign="top"><i>Deprecated.</i>  Comma separated list of patterns of files that must be
      excluded from the deletion list. No files (except default excludes) are excluded when omitted.</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">excludesfile</td>
    <td valign="top"><i>Deprecated.</i>  The name of a file. Each line of this file is
      taken to be an exclude pattern</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">defaultexcludes</td>
    <td valign="top"><i>Deprecated.</i>  Indicates whether default excludes should be used or not
      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
    <td valign="top" align="center">No</td>
  </tr>
</table>
<h3>Examples</h3>
<pre>  &lt;delete file=&quot;/lib/ant.jar&quot;/&gt;</pre>
<p>deletes the file <code>/lib/ant.jar</code>.</p>
<pre>  &lt;delete dir=&quot;lib&quot;/&gt;</pre>
<p>deletes the <code>lib</code> directory, including all files 
and subdirectories of <code>lib</code>.</p>
<pre>  &lt;delete&gt;
    &lt;fileset dir=&quot;.&quot; includes=&quot;**/*.bak&quot;/&gt;
  &lt;/delete&gt;
</pre>
<p>deletes all files with the extension &quot;<code>.bak</code>&quot from the current directory 
and any sub-directories.</p>
<pre>  &lt;delete includeEmptyDirs=&quot;true&quot; &gt;
    &lt;fileset dir=&quot;build&quot; /&gt;
  &lt;/delete&gt;
</pre>
<p>deletes all files and subdirectories of <code>build</code>, including
<code>build</code> itself.</p>
<hr><p align="center">Copyright &copy; 2000,2001 Apache Software Foundation. All rights
Reserved.</p>

</body>
</html>

