Last Updated on 20 August 2020 by Roberto De Pedrini
I believe that all of us who work in the IBM i environment have happened, and continue to do, to have a multitude of obsolete files in the IFS and waste time locating and delet
ing them. One of the new features IBM added with the PTF 7.4 TR1 and 7.3 TR7 allows you to get a list of the contents of an IFS folder simply via SQL.
I discovered this by looking for a solution to clean an IFS folder with over 290,000 files and, searching through the various BLOGs, I found this article by Simon Hutchinson https://www.rpgpgm.com/2019/11/using-sql-to- list-directories-and-files.html in addition to that of our Blogger Massimo Duca (“Let’s explore IFS with DB2 services) in this blog and I decided to try to create a program to better manage it.
Having solved some small logic problems I was able to try it and I obtained an excellent result by reducing the contents of the folder from over 290,000 files to just over 4,000 and, scheduling the program, I know that the files will remain in the folder for 5 days and then they will come S
eeing the result I decided to share this program in the BLOG and I am attaching i
t to you.Obviously, and it couldn’t be otherwise, the program is written in TOTAL FREE which I hope will be used by an increasing number of users
** free ctl-opt datfmt (* eur) datedit (* dmy) debug (* yes) copyright ('FAQ400.COM') decedit ('0,'); // ------------------------------------------------ ------------------------------------------------- * // Definition of convenience fields * // ------------------------------------------------ ------------------------------------------------- * dcl-s date date; dcl-s command char (500); dcl-s json_name char (500); dcl-s messagetext char (1024); // ------------------------------------------------ ------------------------------------------------- * // Main program * // ------------------------------------------------ ------------------------------------------------- * // Set deadline for JSON search date =% date () -% days (5); // Setting the date field to today -5 days // SQL preparation for reading IFS content exec sql // Declaration of the cursor for reading the IFS declare jsn cursor for select CAST (PATH_NAME AS CHAR (500)) // The PATH_NAME field is a 16M blob so I read it from table (QSYS2.IFS_OBJECT_STATISTICS ('/ myfolder / json', 'YES')) // using the CAST function to avoid SQL errors where create_timestamp <=: data and // The * YES option allows reading of subfolders object_type = '* STMF'; // This condition makes me read only * STMF files exec sql open jsn; dow 1 = 1; exec sql fetch jsn into: json_name; if sqlcod <> 0; if sqlcod <> 100; // This function is very useful if you receive exec sql // a sqlcode <> from 100 to get in the messagetext field Get Diagnostics Condition 1 // a more detailed indication of the error received : messageText = MESSAGE_TEXT; endif; leave; endIf; command = 'RMVLNK OBJLNK (' '' +% trim (json_name) + '' ')'; // I compose the command to remove the affected object exec sql call qsys2.qcmdexc (: command); // I execute, via SQL, the command prepared previously // If you have an outdated 7.1 version it might be endDo; // need to enter the length of the command to execute exec sql close jsn; exsr exit; // ------------------------------------------------ ------------------------------------------------- * // End of job routine * // ------------------------------------------------ ------------------------------------------------- * begsr quit; * inlr = * on; return; endsr;
I hope you find the example shown useful.