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 :

Commande rename pour renommer les fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut Commande rename pour renommer les fichiers
    Bonjour,

    Pour renommer en masse mes fichiers j'utilisais : PyRenamer
    Puis, comme cette application n'est plus dans la Logithèque , j'utilise désormais : Renommer en masse

    Je vais renommer mes fichiers photos de famille;
    suivant le format : FAM_NOM_Prénom_aaaammjj_Lieu
    Pour faire simple, avant, les photos étaient enregistrées suivant le format : FAM_CLÉ_Prénom_Nom_AutresInformationsDiverses ou un peu n'importe comment.

    Pour réaliser ce renommage, j'avais pour idée :
    1/ Lister la taille et le nom de tous les fichiers "Famille" en utilisant la commande : ls -sh
    2/ Copier Coller cette liste dans un fichier csv; pa rexemple f.csv et récupérer un fichier ne contenant que les noms de fichiers; par exemple : f1.csv
    3/ Récupérer ce fichier sous .ods (les _ étant les séparateurs de champs) par : Fichier/Ouvrir/... .csv
    4/ Utiliser le tableur pour faire les renommages principalement par copier coller en permutant les champs "Prénom" "Nom", et en mettant les noms en majuscule
    5/ Récupérer les noms de fichiers (dans cet ordre) dans un fichier .csv; par exemple f2.csv par : Fichier/Enregistre sous/... .csv

    6/ Comment renommer les noms des fichiers contenu dans f1.csv (respectivement ligne par ligne) par les noms des fichiers contenus dans f2.csv ?
    (Je ne sais pas faire cette 6ième étape finale)

    Avez-vous des idées ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    et non,
    Citation Envoyé par NBaH
    ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    et après c'est du grand n'importe quoi; n'oublie pas que tu postes dans la section Shell et commandes GNU

    il existe un programme rename dans le paquet util-linux.

    sinon cf. man find l'option /exec ou /printf, avec un peu de shell pour découper les noms des fichiers.

    --
    un tableur
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    ... Et donc,

    6/ Comment renommer les noms des fichiers contenu dans f1.csv (respectivement ligne par ligne) par les noms des fichiers contenus dans f2.csv ?
    on ne peut pas, avec la commande rename, répondre à la question 6/ ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    tes fichiers temporaires ne serviront à rien.

    rename utilise des regex Perl. Il a donc la capacité d'utiliser des références arrières (comme sed); mais ça peut dépendre des versions, il faut vérifer dans le man. C'est le cas sur Debian.
    Si rename n'est pas récursif (il ne descend pas dans les sous-répertoires), c'est cependant possible avec bash, en activant globstar avec shopt.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour



    Bonne chance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    find ... -printf ... peut aussi afficher la date.

    je suis adepte du caractère NULL (\0) pour séparer les lignes de sortie de find pour bien délimiter les informations de chaque fichier.
    en mettant la date sans espaces en premier*, après le premier espace tout ce qui reste, c'est le nom du fichier.

    --
    * le mieux étant d'afficher la date en secondes depuis EPOCH, puis de traiter ces secondes dans le corps de la boucle

    PS: passer par un fichier intermédiaire qui contient la sortie de ls, c'est comme traiter ls.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/08/2020, 15h27
  2. [Batch] Commande batch pour renommer des fichiers
    Par eole-33 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 12/04/2016, 20h33
  3. Macro pour renommer les fichiers
    Par cristophil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/06/2011, 12h10
  4. Réponses: 3
    Dernier message: 11/05/2010, 19h51
  5. Réponses: 11
    Dernier message: 19/11/2006, 12h45

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