IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Tache cron pour renommer fichier


Sujet :

Shell et commandes GNU

  1. #21
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 25
    Points
    25
    Par défaut
    Bonjour

    Oui bien sûr, mais je ne sais pas trop quoi rechercher enfait.

    Pour vous montrer plus concrètement ce que je souhaite faire, j'ai fait une petite capture d'écran du gestionnaire de fichiers du serveur mail pour vous montrer la différence entre un mail lu et un mail non lu:
    Nom : Capture d’écran 2024-01-26 113948.jpg
Affichages : 48
Taille : 20,0 Ko

    Le S en rouge signifie un mail lu. C'est ce S que j'aimerais ajouter à tous les fichiers qui ne l'ont pas.

    Comment procéder ? Faut il d'abord récupérer le nom des nouveaux fichiers puis vérifier si le S est existant ?

    Je suis parti pour faire le script en php mais n'y a t-il pas un langage plus adéquat pour ce type de script ?

    Merci

  2. #22
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arnlig3550 Voir le message
    Oui bien sûr, mais je ne sais pas trop quoi rechercher enfait.
    Apprendre à manipuler les chaines (détecter si la fin est/n'est pas S)

    Citation Envoyé par arnlig3550 Voir le message
    Comment procéder ? Faut il d'abord récupérer le nom des nouveaux fichiers puis vérifier si le S est existant ?
    Hé oui. C'est ce qu'on appelle un "algorithme". Tu as à ta disposition des instructions simples comme boucle, choix et la possibilité de mémoriser des éléments dans des variables donc il te faut utiliser ces outils pour créer l'algorithme, style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour chaque fichier du dossier mail, faire
        si nom pas terminé par S alors
            copier nom dans nouveau nom avec S
            renommer nom vers nouveau nom
        fin si
    fin pour
    Citation Envoyé par arnlig3550 Voir le message
    Je suis parti pour faire le script en php mais n'y a t-il pas un langage plus adéquat pour ce type de script ?
    Déjà demandé et déjà répondu (mais la réponse dépend de chacun). De mon point de vue, je le ferais soit en shell (facilité de récupérer la liste des fichiers et de les renommer mais gestion des chaines un peu délicate) soit en Python (outils plus puissants, manipulation des chaines ultra simple mais nécessité de passer par une librairie externe pour le renommage).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Apprendre à manipuler les chaines (détecter si la fin est/n'est pas S)

    Hé oui. C'est ce qu'on appelle un "algorithme". Tu as à ta disposition des instructions simples comme boucle, choix et la possibilité de mémoriser des éléments dans des variables donc il te faut utiliser ces outils pour créer l'algorithme, style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour chaque fichier du dossier mail, faire
        si nom pas terminé par S alors
            copier nom dans nouveau nom avec S
            renommer nom vers nouveau nom
        fin si
    fin pour

    Déjà demandé et déjà répondu (mais la réponse dépend de chacun). De mon point de vue, je le ferais soit en shell (facilité de récupérer la liste des fichiers et de les renommer mais gestion des chaines un peu délicate) soit en Python (outils plus puissants, manipulation des chaines ultra simple mais nécessité de passer par une librairie externe pour le renommage).
    Bon... un petit point de départ, pour ceux qui ont envie de se lancer dans le shell...

    Attention ! À tester...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    mdir=/le/dir/ou/sont/les/mails
     
    for f in $mdir/*
    do
        if [[ ! "$f" =~ .*S ]]
        then 
            echo mv "$f" "$f"S
            mv "$f" "$f"S
        fi
    end

  4. #24
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 104
    Points : 4 454
    Points
    4 454
    Par défaut
    bonjour

    Il faudrait aussi savoir si cette boite aux lettres est utilisée uniquement pour ce service, sinon il faut faire une regex plus stricte sur les fichiers ...
    type ? nombre-texte-nombre-"pas de S final"Si tu connais php, alors utilise ton langage sinon tu ne pourras pas faire évoluer ton script !
    $moi= ( !== ) ? : ;

  5. #25
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 25
    Points
    25
    Par défaut
    Bonjour

    Je reviens sur mon sujet pour dire que l'on m'a fait un script en privé, donc le sujet est résolu.

    Pour ceux que ça intéresse, le voici (il y a juste à mettre le chemin du dossier qui contient les mails à la ligne 42) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #!/usr/bin/env bash
     
    # Script qui rajoute un "S" aux noms de fichiers mails
     
    # Usage prog [-x, --exec]
    #	Option -x, --exec: Utilisation du programme en mode exec, renommage réel
     
    set -e			# Toute erreur provoque l'arrêt du script
    set -u			# Appel d'une variable non créée provoque une erreur
    #set -x			# Debugging
     
    # Fonction qui affiche l'usage du programme
    usage() (
    	[ -n "$*" ] && echo "$(basename "$0"): $@"
    	echo "Usage: $(basename "$0") [-x, --exec]"
    )
     
    # Récuperation des options
    while getopts :xh?-: opt; do
    	case $opt in
    		-)
    			# Gestion options longues
    			case "$OPTARG" in
    				exec) action="true";;
    				*)
    					usage
    					exit 1
    			esac
    			;;
    		x) action="true";;
    		h|\\\?)
    			usage
    			exit 0
    			;;
    		*)
    			usage
    			exit 1
    	esac
    done
    shift $(($OPTIND - 1))
     
    dir_mail="/chemin_dossier_mail/"
    echo "# Traitement [$dir_mail]"
    for f in "$dir_mail"/*; do
    	if [ ! -f "$f" ]; then
    		echo "# Document [$f] ignoré (pas fichier)"
    	elif [[ "$f" =~ .{1,}S$ ]]; then
    		echo "# Fichier [$f] ignoré (déjà terminé par 'S')"
    	else
    		ff="${f}S"
    		echo "mv \"$f\" \"$ff\""
    		test -n "${action:-}" && mv "$f" "$ff"
    	fi
    done

    Merci à vous!

  6. #26
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    shopt -s extglob nullglob
    #...
     
    for f in "$dir_mail"/!(*S)
    do
    et tu peux supprimer le elif.

    on m'a fait un script en pv
    c'est quoi "pv" ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #27
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    et tu peux supprimer le elif
    Moi j'aime bien la version précédente car elle montre tout et précise ce qui est traité de ce qui ne l'est pas.
    J'aime bien les scripts qui racontent un peu ce qui se passe...

    Citation Envoyé par N_BaH Voir le message
    c'est quoi "pv" ?
    Procès Verbal
    Private Voicing
    Pub Virtuelle
    Pas Visio
    Pour Voir
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #28
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    je dis pourtant clairement que je veux itérer sur tous les fichiers dont le nom ne finit pas par un S !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #29
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je dis pourtant clairement que je veux itérer sur tous les fichiers dont le nom ne finit pas par un S !
    Oui bien sûr ça se voit !!!
    Ce que je dis, c'est que l'autre version itère tout et indique à chaque item "ceci n'est pas un fichier" ou "celui-ci n'est pas à prendre en compte car finit déjà par S" ; et j'aime bien quand un script est volubile dans ce genre. Ca fait genre "booster engage splash-one check go ready boost"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #30
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    c'est une perte de temps.
    je traite les fichiers qui doivent être traités, et je ne dis pas que je ne traite pas les fichiers dont je ne veux pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Requête pour renommer fichier
    Par hkaidi91 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/12/2019, 09h43
  2. script pour renommer fichier
    Par hugoashka dans le forum Macros et VBA Excel
    Réponses: 54
    Dernier message: 20/04/2017, 09h31
  3. Réponses: 2
    Dernier message: 01/03/2014, 10h19
  4. Tâches cron pour backup
    Par heyyo1 dans le forum Débuter
    Réponses: 1
    Dernier message: 24/07/2010, 18h42
  5. Aide pour renommer fichiers avec .bat
    Par bobsapp dans le forum Windows
    Réponses: 6
    Dernier message: 21/03/2007, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo