Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400Purge IFS files sur une periode d …
Vous devez vous identifier pour créer des messages et des sujets.

Purge IFS files sur une periode de nn jours

find /DIR01/DIR02 -name '*.PDF' -type f -mtime +70

Affiche bien les fichiers

Mais la commande:

find /DIR01/DIR02 -name '*.PDF' -type f -mtime +70 -exec rm {} ;

me donne cette erreur:

find: 001-2191 The ending ';' character was not found.
$

Bonjour,

J'ai trouvé ça sur le net mais à priori ça ne fonctionne pas si j'ai un &dir plus de 32 char

Est-ce que vous avez une idée ?

Merci d'avance.

Sample CLP program to Delete IFS files based on Last Access Date or Modified Date

/*  Delete IFS files based on Last Access or Modified Date        + 
    USE WITH CAUTION : No Guarantee provided !                    + 
                                                                  + 
                                                                  + 
    TO COMPILE:                                                   + 
                                                                  + 
        CRTPF FILE(QTEMP/MYFILE) RCDLEN(1000)                     + 
        CRTCLPGM PGM(DELIFS) SRCFILE(Your_lib/Source)             + 
                                                                  + 
    TO RUN:                                                       + 
                                                                  + 
        CALL DELIFS PARM('/Dir1/Dir2/..' 'A' '5')                 + 
             Delete Files in IFS based on Last Access Date        + 
        Note:The access time of directories in path is changed by + 
             find command itself.                                 + 
                                                                  + 
        CALL DELIFS PARM('/Dir1/Dir2/..' 'M' '5')                 + 
             Delete Files in IFS based on Last Modified Date      + 
                                                                  + 
    PARAMETERS:                                                   + 
        &DIR  = Directory path                                    + 
                Do not just put / as it means the root of the IFS + 
        &TYPE = A=Access Date M=Modfied Date                      + 
        &DAYS = No. of Days                                       + 
                                                                 */ 
                                                                    
             PGM        PARM(&DIR &TYPE &DAYS)                      
                                                                    
             DCL        VAR(&DIR) TYPE(*CHAR) LEN(32)               
                        /* You can increase the length from 32 to  +
                        something else but remember if the lenngth +
                        is more than 32 then you can't call from   +
                        command line OR make a COMMAND            */
                                                                    
             DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)               
             DCL        VAR(&DAYS) TYPE(*CHAR) LEN(4)               
                                                                    
             DCL        VAR(&CMD) TYPE(*CHAR) LEN(250)              
             DCL        VAR(&EOF) TYPE(*LGL) VALUE('0')             
                                                                    
             DCLF       FILE(QTEMP/MYFILE)                          
                        /* This will have the list of files */      
                                                                    
             DLTF       FILE(QTEMP/MYFILE)                          
             MONMSG     MSGID(CPF0000)                              
                                                                    
             CRTPF      FILE(QTEMP/MYFILE) RCDLEN(1000)           
                                                                  
                                                                  
            /* Run Qshell "find" command to load the fileNames +  
               based on your criteria into the MYFILE in QTEMP */ 
                                                                  
             OVRDBF     FILE(STDOUT) TOFILE(QTEMP/MYFILE)         
                                                                  
             IF         COND(&TYPE *EQ 'A') THEN(DO)              
             CHGVAR     VAR(&CMD) VALUE('find' *BCAT &DIR *BCAT + 
                          '-atime +' *CAT &DAYS *BCAT '-type f')  
             ENDDO                                                
             IF         COND(&TYPE *EQ 'M') THEN(DO)              
             CHGVAR     VAR(&CMD) VALUE('find' *BCAT &DIR *BCAT + 
                          '-mtime +' *CAT &DAYS *BCAT '-type f')  
             ENDDO                                                
                                                                  
             STRQSH     CMD(&CMD)                                 
             DLTOVR     FILE(STDOUT)                              
                                                                  
                                                                  
            /* Loop thru each IFS file and Delete */              
                                                                 
 LOOP:       RCVF                                                         
             MONMSG     MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) +            
                          VALUE('1'))                                     
             IF         COND(&EOF *EQ '0') THEN(DO)                       
                        QSYS/DEL   OBJLNK(&MYFILE)                        
             GOTO       CMDLBL(LOOP)                                      
             ENDDO                                                        
                                                                          
            /* You can comment this LINE to get the deleted files LIST */ 
             DLTF       FILE(QTEMP/MYFILE)                                
                                                                          
             ENDPGM

Bonjour,

 

il faut mettre un antislash avant le point virdule pour que ça marche

ind /DIR01/DIR02 -name '*.PDF' -type f -mtime +70 -exec rm {} \;

 

pour le cl si c'est possible comme indiqué il faut agrandir le paramètre et faire une commande, par ex CRTCMD delifs delifs avec le source suivant (pas testé):

cmd 'Delete IFS file based on date'

parm directory *pname 256 min(1) prompt('Directory')

parm cmpdate *char 1 rstd(*yes) spcval((*access 'A') (*modification 'M')) min(1) prompt('Compared date')

parm days *char 4 min(1) prompt('No. of days')

Bonjour,

Le programme ci dessous fonctionne très bien. Le chemin IFS et le nombre de jour est passé en paramètre.

PGM (&CHEMIN &JOURS)

DCL VAR(&CHEMIN) TYPE(*CHAR) LEN(1024)
DCL VAR(&JOURS) TYPE(*CHAR) LEN(4)
DCL VAR(&QSH) TYPE(*CHAR) LEN(2048)

CHGVAR VAR(&QSH) VALUE('FIND' *BCAT &CHEMIN *BCAT +
'-type f -mtime +' *TCAT &JOURS *BCAT +
'-print | XARGS RM')

QSH CMD(&QSH)

ENDPGM

 

Jean

A priori ça ne fonctionne pas,

J'ai essayé

la commande.

find /dir01/dir02 -type f -mtime +5 -print | xargs rm
find /dir01/dir02 -type f -mtime +5 -print | XARGS RM

pour les droits c'est moi qui a crée le répertoire:

             Droits sur ---Droits sur objet----

Opt Utilisat     données   Exist Gest Modif Réf

                                                      

     *PUBLIC            *RWX         X     X     X     X  

     PGMR1              *RWX         X     X     X     X              

 

Je ne sais pas ou ça coince.

j'ai essayé aussi le back slash et ça ne fonctionne pas

ind /DIR01/DIR02 -name '*.PDF' -type f -mtime +70 -exec rm {} \;

 

Merci de vos réponses.

Chez moi ça fonction avec le back slash, ça fait une erreur ou ça ne fait rien ?

Parce que si ça ne fait rien c'est peu être parce-qu'il cherche l'extension en majuscule, faudrait essayer avec -name '*.[pP][dD][fF]'

Merci Vazymimil,

Voila ce qui m'affiche.

find /dir01/dir02 -name '*.PDF'  -type f -mtime  +1  -exec rm {} \;

find: 001-2191 The ending ';' character was not found.
$

 

Avec ça  -name '*.[pP][dD][fF]'

aussi le même retour ---> find: 001-2191 The ending ';' character was not found.
$

Une commande qui peut peut-être servir :

RTVDIRINF DIR('/rep01/rep02') INFFILEPFX(ASUP_) INFLIB(UNE_BIB)

va créer deux fichiers dans la bibliothèque UNE_BIB : ASUP_O qui contient la liste des fichiers de /rep01/rep02/ et ASUP_D celle des répertoires.

À partir des informations contenues dans  ASUP_O (notamment le nom et la date de création du fichier), on peut construire un CL de suppression de ces fichiers en fonction de la date de création.

J'ai essayé avec cette commande hier . Les enregistrements sont bien supprimés dans ASUP_O mais pas dans le'/rep01/rep02'.

Est-ce ça passe mieux avec un c cédille (ç) si c'est ça il y a du jeu dans les CCSID

 

find /dir01/dir02 -name '*.PDF' -type f -mtime +1 -exec rm {} ç;