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
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]'
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
---
Roberto De Pedrini
Faq400.com Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…
Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…
Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…
Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…
Approfitto di una recente discussione su IBM TechXchange per segnalarvi un’ottima guida di Anna Niederschulte: dedicata alla configurazione di SFTP…
Voglio segnalarvi questo secondo post di Massimo Duca nella serie SQL Tips. In questa puntata vediamo come usare SQL per…