Categories: 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

Index

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

Recent Posts

VsCode Extension: Bob Cozzi’s RPG IV to RPG Free Conversion

L’estensione “RPG IV to Free Format Conversion” sviluppata da Bob Cozzi (Cozzi Research) è pensata per semplificare la conversione di…

11 mesi ago

IBM i & SQL Tips #010 – Localizzare programmi nella Call Stack con STACK_INFO

Ciao a tutti, oggi voglio segnalarvi un altro interessante contributo di Massimo Duca, parte della sua ormai nota serie IBM…

11 mesi ago

Display file DDS Edit per VsCode, nuova preview.

Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…

11 mesi ago

Project Bob: il nuovo strumento AI di IBM per sviluppo COBOL su IBM Z e RPG su IBM i

Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…

11 mesi ago

IBM i & SQL Tips #6: chiamare API REST e analizzare le risposte JSON con SQL

Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…

12 mesi ago

Come funziona il passaggio di parametri a un programma IBM i (RPG / Cobol)

Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…

12 mesi ago