04d - IFS

IFS – Cercare files e directories

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

--- 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.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: