The Delete IFS command allows deletion of one or more IFS objects in
a single directory based on selection criteria such as size, last
used date, etc. You must be authorized to the TAACVTIFS
authorization list and must have *OBJEXIST rights to the object to be
deleted. An ACTION parameter exists to allow 'delete' or 'check'.
The 'check' option always creates a spooled file.
In IFS terminology, a "directory" can be
** a directory in the root file system;
** a directory in a directory-centric file system such as
QOpenSys
** a folder in the QDLS file system ('/QDLS/foldername')
** a library in the QSYS.LIB file system ('/qsys.lib/mylib.lib')
You cannot delete a directory if it is in use.
You cannot delete a directory unless:
** The directory IS empty when the command begins.
** The directory IS NOT empty when the command begins, but the
command is able to delete all the objects in the directory
specified in the OBJ parameter, and DLTDIR(*YES) has been
specified.
If a directory contains objects at the end of the command that were
supposed to be deleted, an escape message will occur.
See also the DLTIFSDIR command to delete a directory.
No objects in sub-directories are processed.
A typical command would be:
DLTIFS OBJ(*) OBJNAM(*ALL) OWNER(SMITH) SIZE(1000000)
or
DLTIFS OBJ('.') OBJNAM(*ALL) OWNER(SMITH) SIZE(1000000)
Either would delete all objects in the 'current' directory that are
owned by SMITH and are at least 1 million bytes.
A second command DLTIFS2 is also supported which allows deletion by
using a single parameter, OBJ, to represent the full path to an
object such as:
DLTIFS OBJ('./*ALL') OWNER(SMITH) SIZE(1000000)
To prevent errors on system objects, you cannot delete an object that
is owned by QSYS, QLPINSTALL, or QLPAUTO.
DLTIFS uses the CVTIFS command to build a file in QTEMP (IFSDIRT)
based on the OBJ parameter. OPNQRYF is used to make a selection
based on the other parameters.
You can delete objects in the QSYS library system by specifying the
path name in IFS format. For example to delete program object
MYLIB/MYPGM:
DLTIFS OBJ('/qsys.lib/mylib.lib') OBJNAM(mypgm.pgm)
or
DLTIFS2 OBJ('/qsys.lib/mylib.lib/mypgm.pgm')
If a library is specified, DLTIFS will attempt to delete the objects
in the library. This may result in errors such as where a physical
file cannot be deleted unless all dependent logicals are deleted
first. If you use the command a second time, most of these errors
should be eliminated.
Selection processing
--------------------
The selection criteria such as CHGDATE and ACCDATE are 'anded'
together meaning the object is only selected if all selections are
satisfied.
The CHGDATE parameter is used for both the 'attribute change date'
and the 'data change date'. If either is satisfied, the object is
selected. The parameters ATRCHGDATE and DTACHGDATE may be specified
if you are only interested in one of the dates.
DLTIFS and DLTIFS2 differences and examples
-------------------------------------------
DLTIFS uses two parameters, OBJ and OBJNAM, to fully describe the
object(s) to be deleted. DLTIFS2 uses a single parameter, OBJ, to
accomplish the same thing.
DLTIFS and DLTIFS2 allow the special values '*' or '.' meaning the
current directory. The '.' special value is more useful because it
is allowed as the beginning of a path. The following examples are
valid:
DLTIFS OBJ(*) OBJNAM(file.txt)
DLTIFS OBJ('.') OBJNAM(file.txt)
DLTIFS OBJ('./subdir1') OBJNAM(file.txt)
DLTIFS2 OBJ(*)
DLTIFS2 OBJ('./subdir1/file.txt')
DLTIFS2 OBJ('./subdir1/file.txt')
The following examples are NOT valid
DLTIFS OBJ('*/subdir1') OBJNAM(file.txt)
DLTIFS2 OBJ('*/subdir1/file.txt')
When using '*' or '.', it is recommended that you verify (e.g.
DSPCURDIR) that the current directory is the directory you think it
is. Otherwise, you could get unintended results. Another solution
is to use the ACTION(*CHECK) function.
In the following examples, /home/joe is a directory; abc1, bcd2,
cde3, and x.y are files in /home/joe. A directory that is in use or
is the current directory cannot be deleted. In these examples,
assume that /home/joe is neither the current directory, nor in use.
DLTIFS2 OBJ('/home/joe/*ALL')
or
DLTIFS OBJ('/home/joe') OBJNAM(*ALL)
deletes all four files. The directory '/home/joe' is not deleted
because DLTDIR defaults to *NO. A second execution would delete the
directory. If DLTDIR(*YES) is specified, the directory /home/joe
would be deleted because it has been emptied by the current DLTIFS
execution.
DLTIFS2 OBJ('/home/joe/*'
or
DLTIFS OBJ('/home/joe') OBJNAM('*')
deletes all four files in the same manner as the previous example.
DLTIFS2 OBJ('/home/joe/*3'
or
DLTIFS OBJ('/home/joe') OBJNAM('*3')
deletes file 'cde3'
DLTIFS2 OBJ('/home/joe/*b*'
or
DLTIFS OBJ('/home/joe') OBJNAM('*b*')
deletes files'abc1' and 'bcd2'.
DLTIFS2 OBJ('/home/joe/*.*'
or
DLTIFS OBJ('/home/joe') OBJNAM(*.*)
deletes file 'x.y'.
Names with apostrophes
----------------------
A name such as:
/home/usera/abc'123
may be properly deleted by DLTIFS or DLTIFS2 if the OBJ parameter
does not contains an apostrophe. For example, if
DLTIFS OBJ('/home/usera') OWNER(USERB)
and a stream file on the path is owned by USERB, it would be deleted.
To delete the stream file using the OBJ parameter, multiple
apostrophes must be entered such as:
DLTIFS OBJ('/home/usera') OBJNAM('''abc''''123''')
DLTIFS escape messages you can monitor for
------------------------------------------
TAA9895 Objects may have been deleted, but errors occurred
TAA9896 No objects to delete - check selection criteria
Escape messages from based on functions will be re-sent.
DLTIFS2 escape messages you can monitor for
-------------------------------------------
TAA9895 Objects may have been deleted, but errors occurred
TAA9896 No objects to delete - check selection criteria
Escape messages from based on functions will be re-sent.
DLTIFS command parameters *CMD
-------------------------
OBJ The directory portion of the path name of the object
to be deleted. The OBJ parameter must be a
directory, a distributed directory, a library, or a
folder. It is the name (simple or hierarchical) of
the directory in which the object in the OBJNAM
parameter is located. This parameter is required.
The specified directory will not be deleted if it
contains objects after processing or if DLTDIR(*NO)
is specified.
Empty sub-directories are deleted. Sub-directories
containing objects are not deleted, because their
objects are not processed. When this happens, the
object in the OBJ parameter is not deleted because
it still contains objects.
Specifying '*' or '.' will start processing at the
current directory. If the current directory is the
root ('/'), processing starts at the home directory
('/home').
A typical command would be:
DLTIFS OBJ('.') OWNER(SMITH) SIZE(1000000)
This would delete all objects in the 'current'
directory that are owned by SMITH and are at least 1
million bytes.
/QDLS may also be specified.
OBJNAM The object name to select. The default is *ALL.
A specific name or a generic* name may be entered.
The generic name can be any one of the following
types:
ABC* Select all names beginning with ABC.
A*C Select all names starting with A and ending
with C, like ABC ABBC AXYZC
A*C* Select all names starting with A and
containing at least one C, like ABC ABCD ABBCD
*AB* Select all names containing at lease one
AB combination, like ABC AAB AABC XAB XABC
When using generic names with embedded asterisks
(such as A*C), or multiple asterisks (such as A*C*),
the value must be enclosed in apostrophes.
OBJTYP The object type to select. The default is *ALL for
all object types. Some typical IFS object types are
shown in the command prompt. Depending on the path
name, it is also possible to use other object types
such as *LIB.
OWNER The owner of the object to select on. The default
is *ALL for all owners.
A specific user name (or a generic user name) may be
entered or the special values:
*USER for non-system supplied user profile
names.
*SYS for system user profile names.
The determination of whether the profile is a system
supplied name is done by the tool RTVIBMPRF.
SIZE The size selection if any. This is a two element
parameter.
The first element is the size value which defaults
to *ALL meaning that size will not be considered for
selection. A size may be entered that is 0 or
greater. The field selected on depends on the value
of the SIZETYPE parameter.
The second element is the 'size operator' that
determines how to compare the size value. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for SIZE(*ALL).
SIZETYPE The type of size to be listed. The value entered
determines which field (IFASIZ if *ALLOC or IFOSIZ
if *ACTUAL) is used for the listing and the SIZE
parameter.
*ALLOC is the default for the allocated size of the
objects. The IFASIZ field is used. This is the
same concept as used by i5/OS where object sizes
shown by commands such as DSPOBJD are for the
allocated size.
*ACTUAL may be specified for the actual size of the
objects. The IFOSIZ field is used. This is the
size that would be shown if viewing the object from
a PC.
CRTDATE The 'create date' of the object to select for if
any. This is a two element parameter.
The first element is the create date value which
defaults to *ALL meaning that create dates will not
be considered for selection. A date may be entered
in job format. The field selected on is IFCRDT.
The second element is the 'create date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
CRTDATE(*ALL).
CHGDATE The 'change date' of the object to select for if
any. This is a two element parameter.
The first element is the change date value which
defaults to *ALL meaning that change dates will not
be considered for selection. A date may be entered
in job format. Both the attribute change date
(IFDHDT field) and the data change date (IFDMDT
field) are used for selection in an 'or'
relationship.
The second element is the 'change date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
CHGDATE(*ALL).
ATRCHGDATE The 'attribute change date' of the object to select
for if any. This is a two element parameter.
The first element is the attribute change date value
which defaults to *ALL meaning that attribute change
dates will not be considered for selection. A date
may be entered in job format. The field selected on
is IFDHDT.
The second element is the 'attribute change date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
ATRCHGDATE(*ALL).
DTACHGDATE The 'data change date' of the object to select for
if any. This is a two element parameter.
The first element is the data change date value
which defaults to *ALL meaning that attribute change
dates will not be considered for selection. A date
may be entered in job format. The field selected on
is IFDMDT.
The second element is the 'data change date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
DTACHGDATE(*ALL).
USEDATE The 'last used date' of the object to select for if
any. This is a two element parameter.
The first element is the 'last used date' value
which defaults to *ALL meaning that 'last used
dates' will not be considered for selection. A date
may be entered in job format. The field selected on
is IFLUDT.
The second element is the 'last used date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
USEDATE(*ALL).
ACCDATE The 'last accessed date' of the object to select for
if any. This is a two element parameter.
The first element is the 'last accessed date' value
which defaults to *ALL meaning that 'last accessed
dates' will not be considered for selection. A date
may be entered in job format. The field selected on
is IFACDT.
The second element is the 'last accessed date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
ACCDATE(*ALL).
DAYSUSED The 'number of days used' to select on if any. This
is a two element parameter.
The first element is the 'number of days' value
which defaults to *ALL meaning that days used will
not be considered for selection. A 'number of days
used' may be entered that is 0 or greater. The
field selected on is IFDYSU.
The second element is the 'number of days used
operator' that determines how to compare the value.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
DAYSUSED(*ALL).
The system only updates this information once per
day. The value does not reflect the number of times
an object has been used. The data may not be
accurate for system objects.
TRANSLATE A *YES/*NO value for whether to translate the IFS
names to upper case before selecting for deletion.
*YES is the default so that the comparisons are
'case-insensitive'.
*NO may be specified to not translate the IFS names.
This should be used when operating in a
'case-sensitive' file system.
USRPRF The user profile that will be switched to when
DLTIFS uses CVTIFS and CHKIFSE. QSECOFR is the
default.
For file systems such as QNTC, DLTIFS will fail if
QSECOFR does not exist. You must ensure that if
multiple systems are used, the same profile and
password exist on each.
*CURRENT or a specific user profile may be used.
Deletion of IFS objects occurs under the user
profile running DLTIFS, not under the USRPRF
parameter's user.
DLTSPLF A *YES/*NO parameter that determines if the spooled
file listing should be deleted if there are no
errors. If ACTION(*CHECK) is specified, this
parameter is ignored.
*NO may be specified to retain the spooled file
regardless of whether errors exist.
DLTDIR A *YES/*NO parameter for whether the directory
object in the OBJ parameter should be deleted if it
is empty, either at the beginning of this execution,
or as the result of this execution deleting all its
contents.
*NO is the default to retain the directory. If the
directory is empty, no error will occur.
*YES may be specified to delete the directory if it
contains no objects after processing. Because
sub-directories are not processed, a directory
containing any non-empty sub-directories cannot be
deleted.
ACTION Whether to delete objects or to check whether they
would be deleted.
*DLT is the default to cause the objects to be
deleted.
*CHECK may be specified to create a listing of what
would be deleted.
DLTSYMLNK A *YES/*NO parameter for whether to delete *SYMLNK
object types.
*YES is the default to delete *SYMLNK object types.
*NO may be specified to bypass *SYMLNK object types.
Some symbolic links appear as *STMF object types.
These will be deleted even if *NO is specified.
DLTIFS2 command parameters *CMD
--------------------------
OBJ The path name of the object(s) to be deleted. This
parameter contains two parts, specified in IFS
format. The first part must be a directory, a
distributed directory, a library, or a folder.
We'll call this first part the directory portion and
its value, the directory. The second part is the
objects in the directory that are to be deleted.
We'll call it the object name. The directory can be
a simple name or a name that is qualified with the
name of other directories containing this directory.
This parameter is required.
The directory will not be deleted if it contains
objects after DLTIFS2 processes its contents and
DLTDIR(*NO) is specified.
Empty subdirectories are deleted. Subdirectories
containing objects are not deleted because their
objects are not processed. When this happens, the
directory in the directory portion of the OBJ
parameter is not deleted because it still contains
objects.
Because the OBJ parameter is defined as a path, you
cannot use * to start processing with the current
directory. Instead, you can use the IFS convention
of a single period (.). Specifying . will start
the convert process at the current directory level.
If the current directory level is at the root ('/'),
the convert process will start at the home directory
('/home').
A typical command would be:
DLTIFS2 OBJ('./*') OWNER(SMITH) SIZE(1000000)
This would delete all objects in the 'current'
directory that are owned by SMITH and are at least 1
million bytes.
/QDLS may also be specified.
The object name portion accepts *ALL or * to
represent all objects in directory.
A specific name or a generic* name may be entered.
The generic name can be any one of the following
types:
ABC* Select all names beginning with ABC.
A*C Select all names starting with A and ending
with C, like ABC ABBC AXYZC
A*C* Select all names starting with A and
containing at least one C, like ABC ABCD ABBCD
*AB* Select all names containing at lease one
AB combination, like ABC AAB AABC XAB XABC
When using generic names with embedded asterisks
(such as A*C), or multiple asterisks (such as A*C*),
the OBJ parameter's value must be enclosed in
apostrophes.
OBJTYP The object type to select. The default is *ALL for
all object types. Some typical IFS object types are
shown in the command prompt. Depending on the path
name, it is also possible to use other object types
such as *LIB.
OWNER The owner of the object to select on. The default
is *ALL for all owners.
A specific user name (or a generic user name) may be
entered or the special values:
*USER for non-system supplied user profile
names.
*SYS for system user profile names.
The determination of whether the profile is a system
supplied name is done by the tool RTVIBMPRF.
SIZE The size selection if any. This is a two element
parameter.
The first element is the size value which defaults
to *ALL meaning that size will not be considered for
selection. A size may be entered that is 0 or
greater. The field selected on depends on the value
of the SIZETYPE parameter.
The second element is the 'size operator' that
determines how to compare the size value. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for SIZE(*ALL).
SIZETYPE The type of size to be listed. The value entered
determines which field (IFASIZ if *ALLOC or IFOSIZ
if *ACTUAL) is used for the listing and the SIZE
parameter.
*ALLOC is the default for the allocated size of the
objects. The IFASIZ field is used. This is the
same concept as used by i5/OS where object sizes
shown by commands such as DSPOBJD are for the
allocated size.
*ACTUAL may be specified for the actual size of the
objects. The IFOSIZ field is used. This is the
size that would be shown if viewing the object from
a PC.
CRTDATE The 'create date' of the object to select for if
any. This is a two element parameter.
The first element is the create date value which
defaults to *ALL meaning that create dates will not
be considered for selection. A date may be entered
in job format. The field selected on is IFCRDT.
The second element is the 'create date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
CRTDATE(*ALL).
CHGDATE The 'change date' of the object to select for if
any. This is a two element parameter.
The first element is the change date value which
defaults to *ALL meaning that change dates will not
be considered for selection. A date may be entered
in job format. Both the attribute change date
(IFCHDT field) and the data change date (IFMODT
field) are used for selection with an 'or'
condition.
The second element is the 'change date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
CHGDATE(*ALL).
ATRCHGDATE The 'attribute change date' of the object to select
for if any. This is a two element parameter.
The first element is the attribute change date value
which defaults to *ALL meaning that attribute change
dates will not be considered for selection. A date
may be entered in job format. The field selected on
is IFDHDT.
The second element is the 'attribute change date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
ATRCHGDATE(*ALL).
DTACHGDATE The 'data change date' of the object to select for
if any. This is a two element parameter.
The first element is the data change date value
which defaults to *ALL meaning that attribute change
dates will not be considered for selection. A date
may be entered in job format. The field selected on
is IFDMDT.
The second element is the 'data change date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
DTACHGDATE(*ALL).
USEDATE The 'last used date' of the object to select for if
any. This is a two element parameter.
The first element is the 'last used date' value
which defaults to *ALL meaning that 'last used
dates' will not be considered for selection. A date
may be entered in job format. The field selected on
is IFLUDT.
The second element is the 'last used date operator'
that determines how to compare the date. The
default is *GE. The standard Boolean operators are
supported. The operator is ignored for
USEDATE(*ALL).
ACCDATE The 'last accessed date' of the object to select for
if any. This is a two element parameter.
The first element is the 'last accessed date' value
which defaults to *ALL meaning that 'last accessed
dates' will not be considered for selection. A date
may be entered in job format. The field selected on
is IFACDT.
The second element is the 'last accessed date
operator' that determines how to compare the date.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
ACCDATE(*ALL).
DAYSUSED The 'number of days used' to select on if any. This
is a two element parameter.
The first element is the 'number of days' value
which defaults to *ALL meaning that days used will
not be considered for selection. A 'number of days
used' may be entered that is 0 or greater. The
field selected on is IFDYSU.
The second element is the 'number of days used
operator' that determines how to compare the value.
The default is *GE. The standard Boolean operators
are supported. The operator is ignored for
DAYSUSED(*ALL).
The system only updates this information once per
day. The value does not reflect the number of times
an object has been used. The data may not be
accurate for system objects.
TRANSLATE A *YES/*NO value for whether to translate the IFS
names to upper case before selecting for deletion.
*YES is the default so that the comparisons are
'case-insensitive'.
*NO may be specified to not translate the IFS names.
This should be used when operating in a
'case-sensitive' file system.
USRPRF The user profile that will be switched to when
DLTIFS2 uses CVTIFS and CHKIFSE. QSECOFR is the
default. For file systems such as QNTC, DLTIFS will
fail if QSECOFR does not exist. You must ensure
that if multiple systems are used, the same profile
and password exist on each.
*CURRENT or a specific user profile may be used.
Deletion of IFS objects occurs under the user
profile running DLTIFS, not under the USRPRF
parameter's user.
DLTSPLF A *YES/*NO parameter that determines if the spooled
file listing should be deleted if there are no
errors. If ACTION(*CHECK) is specified, this
parameter is ignored.
*NO may be specified to retain the spooled file
regardless of whether errors exist.
DLTDIR A *YES/*NO parameter for whether the directory
object in the OBJ parameter should be deleted if is
empty, either at the beginning of this execution, or
as the result of this execution deleting all its
contents.
*NO is the default to retain the directory.
*YES may be specified to delete the directory if it
contains no objects after processing. Because
sub-directories are not processed, a directory
containing any non-empty sub-directories cannot be
deleted.
ACTION Whether to delete objects or to check whether they
would be deleted.
*DLT is the default to cause the objects to be
deleted.
*CHECK may be specified to create a listing of what
would be deleted.
DLTSYMLNK A *YES/*NO parameter for whether to delete *SYMLNK
object types.
*YES is the default to delete *SYMLNK object types.
*NO may be specified to bypass *SYMLNK object types.
Some symbolic links appear as *STMF object types.
These will be deleted even if *NO is specified.
Restrictions
------------
You must be authorized to the TAACVTIFS authorization list.
You must be authorized to delete the object (*OBJEXIST).
You cannot delete a directory type object unless:
** The directory is empty when the command begins.
** All objects in the directory have been deleted and
DLTDIR(*YES) has been specified.
You cannot delete an object that is owned by QSYS, QLPINSTALL, or
QLPAUTO.
Prerequisites
-------------
The following TAA Tools must be on your system:
CHKGENERC Check generic
CHKIFSE Check IFS entry
CRTDUPPF Create duplicate PF
CVTIFS Convert IFS
EDTVAR Edit variable
SNDCOMPMSG Send completion message
SNDESCMSG Send escape message
SNDJLGMSG Send job log message
Implementation
--------------
None, the tool is ready to use.
Objects used by the tool
------------------------
Object Type Attribute Src member Src file
------ ---- --------- ---------- ----------
DLTIFS *CMD TAAIFSQ QATTCMD
DLTIFS2 *CMD TAAIFSQ2 QATTCMD
TAAIFSQC *PGM CLP TAAIFSQC QATTCL
TAAIFSQC2 *PGM CLP TAAIFSQC2 QATTCL
TAAIFSQC3 *PGM CLP TAAIFSQC3 QATTCL
TAAIFSQC4 *PGM CLP TAAIFSQC4 QATTCL
TAAIFSQR *PGM RPGLE TAAIFSQR QATTRPG
TAAIFSQR2 *PGM RPGLE TAAIFSQR2 QATTRPG
Structure
---------
DLTIFS Cmd
TAAIFSQC CL Pgm
TAAIFSQR RPGLE Pgm
TAAIFSQC2 CL Pgm
TAAIFSQC4 CL Pgm
DLTIFS2 Cmd
TAAIFSQC3 CL Pgm
TAAIFSQR2 RPGLE Pgm
TAAIFSQR RPGLE Pgm
TAAIFSQC2 CL Pgm
TAAIFSQC4 CL Pgm
|