je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire
${REP_A_PURGER} quand leur date de dernière modification date de plus de
${NB_JOURS_PURGE}
J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon
répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai
pas de droits de lecture car il essaie de l'explorer.
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça
ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement
eu un problème dans la suppression des fichiers en question.
Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers
modifiés il y a plus de n jours, mais la fonction de recherche récursive ne
m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer
sont directement dans le répertoire ${REP_A_PURGER}
Y a-t-il un moyen de faire fonctionner le find en mode non récursif ?
Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à
la fois sous AIX et sous Sun.
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser
l'option -prune pour stopper justement la récursivité mais je n'ai pas tout
compris à son fonctionnement et notamment je ne comprends pas pourquoi:
find . -type f -prune
et
find . -prune -type f
ne renvoient pas la même chose...
Si quelqu'un peut aussi m'éclairer la-dessus...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal Bourguignon
"Fred S" writes:
Bonjour,
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire ${REP_A_PURGER} quand leur date de dernière modification date de plus de ${NB_JOURS_PURGE} J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer. Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question.
Un problème dans la suppression ou un problème dans la recherche?
Tu le dis toi même: dans la suppression!
Alors il ne faut pas vérifier le status de find, mais le status de chaque rm!
find "${REP_A_PURGER}" -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print | while read file ; do rm -f "$file" || echo "Problème pour supprimer $file" done
Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers modifiés il y a plus de n jours, mais la fonction de recherche récursive ne m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer sont directement dans le répertoire ${REP_A_PURGER} Y a-t-il un moyen de faire fonctionner le find en mode non récursif ?
Oui avec -prune
find "${REP_A_PURGER}" ( -type d -prune ) -o ( -type f -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print )
Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à la fois sous AIX et sous Sun.
Pour que ça marche bien partout, le mieux c'est de fetcher les sources du même bash et de le compiler partout...
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser l'option -prune pour stopper justement la récursivité mais je n'ai pas tout compris à son fonctionnement et notamment je ne comprends pas pourquoi:
find . -type f -prune
trouve _récursivement_ tout élément de type fichier, ET quand on tombe sur un tel élément, on prune, on ne va pas regarder dedans s'il y a des sous-répertoires (dans un fichier, il n'y en a pas, alors ça ne sert à rien!).
et find . -prune -type f
trouve récursivement le répretoire courant, et le prune (on n'ira pas voir ce qu'il y a dedans), et comme ce n'est un fichier, on ne fera rien d'autre.
ne renvoient pas la même chose... Si quelqu'un peut aussi m'éclairer la-dessus...
The world will now reboot. don't bother saving your artefacts.
"Fred S" <r5tr@free.fr> writes:
Bonjour,
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire
${REP_A_PURGER} quand leur date de dernière modification date de plus de
${NB_JOURS_PURGE}
J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon
répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai
pas de droits de lecture car il essaie de l'explorer.
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça
ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement
eu un problème dans la suppression des fichiers en question.
Un problème dans la suppression ou un problème dans la recherche?
Tu le dis toi même: dans la suppression!
Alors il ne faut pas vérifier le status de find, mais le status de chaque rm!
find "${REP_A_PURGER}" -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print
| while read file ; do
rm -f "$file" || echo "Problème pour supprimer $file"
done
Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers
modifiés il y a plus de n jours, mais la fonction de recherche récursive ne
m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer
sont directement dans le répertoire ${REP_A_PURGER}
Y a-t-il un moyen de faire fonctionner le find en mode non récursif ?
Oui avec -prune
find "${REP_A_PURGER}"
( -type d -prune )
-o ( -type f -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print )
Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à
la fois sous AIX et sous Sun.
Pour que ça marche bien partout, le mieux c'est de fetcher les sources
du même bash et de le compiler partout...
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser
l'option -prune pour stopper justement la récursivité mais je n'ai pas tout
compris à son fonctionnement et notamment je ne comprends pas pourquoi:
find . -type f -prune
trouve _récursivement_ tout élément de type fichier, ET quand on tombe
sur un tel élément, on prune, on ne va pas regarder dedans s'il y a
des sous-répertoires (dans un fichier, il n'y en a pas, alors ça ne
sert à rien!).
et
find . -prune -type f
trouve récursivement le répretoire courant, et le prune (on n'ira pas
voir ce qu'il y a dedans), et comme ce n'est un fichier, on ne fera
rien d'autre.
ne renvoient pas la même chose...
Si quelqu'un peut aussi m'éclairer la-dessus...
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire ${REP_A_PURGER} quand leur date de dernière modification date de plus de ${NB_JOURS_PURGE} J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer. Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question.
Un problème dans la suppression ou un problème dans la recherche?
Tu le dis toi même: dans la suppression!
Alors il ne faut pas vérifier le status de find, mais le status de chaque rm!
find "${REP_A_PURGER}" -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print | while read file ; do rm -f "$file" || echo "Problème pour supprimer $file" done
Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers modifiés il y a plus de n jours, mais la fonction de recherche récursive ne m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer sont directement dans le répertoire ${REP_A_PURGER} Y a-t-il un moyen de faire fonctionner le find en mode non récursif ?
Oui avec -prune
find "${REP_A_PURGER}" ( -type d -prune ) -o ( -type f -name "nomfic_*.txt" -mtime "+${NB_JOURS_PURGE}" -print )
Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à la fois sous AIX et sous Sun.
Pour que ça marche bien partout, le mieux c'est de fetcher les sources du même bash et de le compiler partout...
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser l'option -prune pour stopper justement la récursivité mais je n'ai pas tout compris à son fonctionnement et notamment je ne comprends pas pourquoi:
find . -type f -prune
trouve _récursivement_ tout élément de type fichier, ET quand on tombe sur un tel élément, on prune, on ne va pas regarder dedans s'il y a des sous-répertoires (dans un fichier, il n'y en a pas, alors ça ne sert à rien!).
et find . -prune -type f
trouve récursivement le répretoire courant, et le prune (on n'ira pas voir ce qu'il y a dedans), et comme ce n'est un fichier, on ne fera rien d'autre.
ne renvoient pas la même chose... Si quelqu'un peut aussi m'éclairer la-dessus...
Je n'ai pas vérifié. Il faudra peut-être adapter un peu le -perm.
find . -type f -prune et find . -prune -type f ne renvoient pas la même chose pour la même raison qu'avec -print. Dans le premier cas, on ne va "pruner" que les fichiers, donc les répertoires seront affichés. Dans le deuxième cas, on prune tout puisque le test -type vient après l'action.
A+ Fred
Bonjour,
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire ${REP_A_PURGER} quand leur date de dernière modification date de plus de ${NB_JOURS_PURGE} J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer. Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question. Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers modifiés il y a plus de n jours, mais la fonction de recherche récursive ne m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer sont directement dans le répertoire ${REP_A_PURGER} Y a-t-il un moyen de faire fonctionner le find en mode non récursif ? Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à la fois sous AIX et sous Sun.
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser l'option -prune pour stopper justement la récursivité mais je n'ai pas tout compris à son fonctionnement et notamment je ne comprends pas pourquoi: find . -type f -prune et find . -prune -type f ne renvoient pas la même chose... Si quelqu'un peut aussi m'éclairer la-dessus...
Merci beaucoup Fred.
Bonjour,
Le -prune marche un peut comme le -print en ignorant et en arrêtant la
récursivité sur le fichier trouvé.
Je pense que la commande suivante devrait te convenir :
Je n'ai pas vérifié. Il faudra peut-être adapter un peu le -perm.
find . -type f -prune
et
find . -prune -type f
ne renvoient pas la même chose pour la même raison qu'avec -print.
Dans le premier cas, on ne va "pruner" que les fichiers, donc les
répertoires seront affichés. Dans le deuxième cas, on prune tout puisque
le test -type vient après l'action.
A+
Fred
Bonjour,
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire
${REP_A_PURGER} quand leur date de dernière modification date de plus de
${NB_JOURS_PURGE}
J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon
répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai
pas de droits de lecture car il essaie de l'explorer.
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça
ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement
eu un problème dans la suppression des fichiers en question.
Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers
modifiés il y a plus de n jours, mais la fonction de recherche récursive ne
m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer
sont directement dans le répertoire ${REP_A_PURGER}
Y a-t-il un moyen de faire fonctionner le find en mode non récursif ?
Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à
la fois sous AIX et sous Sun.
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser
l'option -prune pour stopper justement la récursivité mais je n'ai pas tout
compris à son fonctionnement et notamment je ne comprends pas pourquoi:
find . -type f -prune
et
find . -prune -type f
ne renvoient pas la même chose...
Si quelqu'un peut aussi m'éclairer la-dessus...
Je n'ai pas vérifié. Il faudra peut-être adapter un peu le -perm.
find . -type f -prune et find . -prune -type f ne renvoient pas la même chose pour la même raison qu'avec -print. Dans le premier cas, on ne va "pruner" que les fichiers, donc les répertoires seront affichés. Dans le deuxième cas, on prune tout puisque le test -type vient après l'action.
A+ Fred
Bonjour,
je cherche à supprimer les fichiers nommés nomfic_*.txt dans le répertoire ${REP_A_PURGER} quand leur date de dernière modification date de plus de ${NB_JOURS_PURGE} J'utilise les commandes suivantes:
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer. Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question. Ici, j'utilise un find parce que c'est pratique pour trouver les fichiers modifiés il y a plus de n jours, mais la fonction de recherche récursive ne m'intéresse pas dans ce cas car je sais que tous les fichiers à supprimer sont directement dans le répertoire ${REP_A_PURGER} Y a-t-il un moyen de faire fonctionner le find en mode non récursif ? Quelqu'un a-t-il une autre solution intéressante ?
Je précise que je suis en ksh et que je cherche une solution fonctionnant à la fois sous AIX et sous Sun.
D'autre part au cours de mes tentatives, j'ai essayé d'utiliser l'option -prune pour stopper justement la récursivité mais je n'ai pas tout compris à son fonctionnement et notamment je ne comprends pas pourquoi: find . -type f -prune et find . -prune -type f ne renvoient pas la même chose... Si quelqu'un peut aussi m'éclairer la-dessus...
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer.
C'est le comportement attendu de "find".
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question.
Il suffit d'executer une action quand une des clauses de "find" échoue. ex: find ... -exec rm -f {} ; -o print
S'il y a des sous répertoires, "rm -f" va échouer de toute manière.
Mon problème est que la commande find renvoie un code erreur si mon
répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai
pas de droits de lecture car il essaie de l'explorer.
C'est le comportement attendu de "find".
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça
ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement
eu un problème dans la suppression des fichiers en question.
Il suffit d'executer une action quand une des clauses de "find" échoue.
ex:
find ... -exec rm -f {} ; -o print
S'il y a des sous répertoires, "rm -f" va échouer de toute manière.
Mon problème est que la commande find renvoie un code erreur si mon répertoire ${REP_A_PURGER} contient un sous-répertoire sur lequel je n'ai pas de droits de lecture car il essaie de l'explorer.
C'est le comportement attendu de "find".
Je pourrais supprimer le contrôle [ $CodeRetourRm -ne 0 ] && exit 1 mais ça ne m'arrange pas car j'aimerais que le script s'arrête s'il y a réellement eu un problème dans la suppression des fichiers en question.
Il suffit d'executer une action quand une des clauses de "find" échoue. ex: find ... -exec rm -f {} ; -o print
S'il y a des sous répertoires, "rm -f" va échouer de toute manière.