04d - IFS

IFS – Cercare files e directories

Last Updated on 3 Ottobre 2021 by Roberto De Pedrini

Approfitto di una domanda fatta sui gruppi di discussione Midrange.com (Is there an easy way to find a file in IFS?) per riepilogare, in questo post, alcuni modi differenti per cercare un file all’interno di una o più directory IFS. La domanda specifica era … esiste qualcosa di per cercare negli oggetti IFS come comando WRKOBJ che utilizziamo in ambiente IBM i nella libreria QSYS?

Se “navighiamo” nel nostro IFS partendo da QSH, ricordiamoci che siamo in un mondo molto simile al Linux e quindi diversi comandi Linux funzionano egregiamente anche qui!

Supponiamo di avere una directory IFS “/f4docs” dove ci sono migliaia di file e sottocartelle. Vediamo diversi tipi di ricerca e le diverse possibilità che abbiamo da ambiente IBM i o da QSH:

1 – Comando FIND da QSH o SSH: vediamo in questo una ricerca di tutti i files della directory “/f4docs” di tipo “.TXT” con il nome che contiene “02342” … comprese eventuali sottodirectory

find /f4docs -name "*02432*.TXT"

2 – Comando FIND + GREP da QSH o SSH : il problema del FIND è che è sempre case-sensitive in ambiente QSH … se abbiamo bisogno di filtrare solo determinati file non tenendo conto del “case” carattere:

find /f4docs -type f -name "*02432*"  | grep ".txt" -i    

3 – Comando FIND + GREP (per cercare anche dentro nel contenuto dei files), da QH e SSH: modificando leggermente la sintassi della parte GREP è possibile anche cercare i files con un certo contenuto (in questo caso la stringa “MOTO”

find /f4docs -name "*.TXT" -exec grep -l 'MOTO' {} \;

4 – Con SQL e QSYS2.IFS_OBJECT_STATISTICS: una alternativa interessante per cercare files e oggetti IFS è SQL con gli IBM i Services … in particolare QSYS2.IFS_OBJECT_STATISTICS

Select *
  from Table(QSYS2.IFS_Object_Statistics(Start_Path_Name => '/f4docs',
Subtree_Directories => 'YES')) x
  Where Lower(Path_Name) like '%02432%';

5 – Con RTVDIRINF e SQL sulle tabelle cataloghi create:

// first, delete RTVDIRINF result tables

DLTF QSURSYS/QAEZD0001I
MONMSG MSGID(CPF0000)
DLTF QSURSYS/QAEZD0001D
MONMSG MSGID(CPF0000)
DLTF QSURSYS/QAEZD0001O
MONMSG MSGID(CPF0000)

// then collect data from your directoy

RTVDIRINF DIR('/f4docs')

// and search your files
 
SELECT o.Qezalcsize
        ,SUBSTR(o.Qezobjnam, 1, 40)
        ,d.Qezdirnam1
     FROM qusrsys.Qaezd0001o o
          INNER JOIN qusrsys.Qaezd0001d d
               ON o.Qezdiridx = d.Qezdiridx
     WHERE 1=1
     and qezobjtype='*STMF'
     and UPPER(o.Qezobjnam) LIKE '%02432%'
     ORDER BY o.Qezalcsize DESC;

6 – Con Powershell e Findstr se la directory IFS è in condivisione – share: se vogliamo cercare dentro il contenuto dei files da Windows, possiamo utilizzare la PowerShell e il comando Findstr, puntanto ad una directory IFS condivisa … con una velocità veramente interessante. Se vogliamo, ad esempio, cercare i files che contengono al loro interno la parola “MOTO” …. come nell’esempio 3 sopra riportato, ma utilizzando FINDSR la sintassi è la seguente:

findstr /s /i /c:"MOTO" \\myIBMi\f4docs\*.TXT

/s search in al subdirectories
/i case insensitive
/c: search string

7 – Updatedb e Locate, utility open source dal mondo Linux … permettono una ricerca veloce utilizzando anche tutte le potenzialità delle regular expression.

updatedb -l0 -U /f4docs -o /tmp/myindex
locate -d /tmp/myindex 02342

Altri esempi

01 Cercare i files che iniziano con un numero

Listare i files in una directory IFS che non iniziano con un numero (“myfile.txt” ok, “210021.txt” not ok)

ls | grep -v '^[0-9]'

02 Cercare le directory vuote

Il comando “find” … che arriva con QShell, è molto limitato.

Ti consiglio di installare la versione GNU “findutils” per avere un find molto più potente.

-- Once only
yum install findutils

-- then, if you are looking for empty directories
find /home/faq400/ -type d -empty
Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

--- Roberto De Pedrini Faq400.com
About author

Founder di Faq400 Srl, IBM Champion, ideatore del sito Faq400.com e del Blog blog.faq400.com. Sviluppatore RPG da quando avevo i pantaloni corti, forte sostenitore della piattaforma IBM i (ex AS400), ho sempre cercato di convididere le mie conoscenze con gli altri tramite forum, eventi e corsi. Oggi, tramite Faq400 Srl, cerchiamo di aiutare le aziende a sfruttare al meglio questa fantastica piattaforma IBM i.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *