Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/08/2015, à 19:16

Compte anonymisé

[Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Bonjour,

Je souhaite modifier l'emplacement d'un élément de plusieurs fichiers
Mon seul soucis c'est qu'une parti de cet élément change pour chaque fichier

Je m'explique, j'ai des fichiers du type

M6 - En famille - Titre1 2015_08_12_19_00.mp4
M6 - En famille - Titre2 2015_08_12_19_05.mp4
M6 - En famille - Titre3 2015_08_12_19_10.mp4
M6 - En famille - Titre4 2015_08_12_19_15.mp4
M6 - En famille - Titre5 2015_08_12_19_20.mp4
---
---
---

Avec le terminal, je n'arrive pas à faire en sorte d'avoir

M6 - En famille - 2015_08_12_19_00 Titre1.mp4
M6 - En famille - 2015_08_12_19_05 Titre2.mp4
M6 - En famille - 2015_08_12_19_10 Titre3.mp4
M6 - En famille - 2015_08_12_19_15 Titre4.mp4
M6 - En famille - 2015_08_12_19_20 Titre5.mp4

A l'origine j'avais

En famille - Titre1_M6_2015_08_12_19_00.mp4

grâce à

rename 's/En famille/M6 - En famille/' *
rename 's/_M6_/ /' *

Je suis arrivé à

M6 - En famille - Titre1 2015_08_12_19_00.mp4
---
M6 - En famille - Titre3 2015_08_12_19_10.mp4
---

Mais là, je sèche

Si quelqu'un pouvait me donner un ou plusieurs éléments de réponses, ce serait vraiment sympa
Merci pour toute l'aide que vous pourrez m'apporter

Dernière modification par NéoUbuntonien (Le 14/08/2015, à 12:19)

#2 Le 12/08/2015, à 19:29

pingouinux

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Bonjour,
Tu peux essayer ceci, après avoir fait une sauvegarde, au cas où  (tu enlèves ensuite echo si c'est bon)

for i in M6*mp4
do
   base=$(basename "$i" .mp4)
   j=$(awk '{tit=$6;dat=$7;$6=dat;$7=tit; print}' <<<"$base").mp4
   echo mv -i "$i" "$j"
done

Hors ligne

#3 Le 12/08/2015, à 23:08

Compte anonymisé

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Le seul hic, c'est que les titres contiennent des espaces et tiret car il y a plusieurs titres dans 1 fichier

M6 - En famille - L'ECHARDE - LE PLAN C - CHLOE & GOLIATH - JEU DE SOCIETE 2015_08_11_18_45.mp4
M6 - En famille - MESSAGE CODE - NUNUCHERIES - L'HEURE D'ETE 2015_08_11_18_50.mp4
M6 - En famille - SECRET MEDICAL - LE SEL DE LA VIE - BOCAL - SI TU L'DIS 2015_08_11_18_55.mp4
M6 - En famille - LES TEMPS MODERNES - CORPS A CORPS - PILE OU FACE 2015_08_11_19_00.mp4

Je sais, ça complique

#4 Le 13/08/2015, à 06:13

pingouinux

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Des espaces consécutives seront remplacées par une seule.

for i in M6*mp4
do
   base=$(basename "$i" .mp4)
   j=$(awk '{dat=$NF;for(k=7;k<NF;k++){$6=$6" "$k}$7=$6;$6=dat;NF=7; print}' <<<"$base").mp4
   echo mv -i "$i" "$j"
done

Édité : Ou même plus simplement

for i in M6*mp4
do
   base=$(basename "$i" .mp4)
   j=$(awk '{$5=$5" "$NF;NF-=1;print}' <<<"$base").mp4
   echo mv -i "$i" "$j"
done

Dernière modification par pingouinux (Le 13/08/2015, à 07:02)

Hors ligne

#5 Le 13/08/2015, à 07:37

Compte anonymisé

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Avant de le faire sur un terminal ou d'en faire un script sh, pourrais-tu m'expliquer les lignes ?
for/do/done je comprends que c'est la boucle (recemble à do/loop et for/next que j'utilisais il y a bien longtemps sur mon MO6)

Pourrais-tu m'expliquer le script ?

Si je souhaite en faire un script, je me doute que je devrai débuter par un cd car les vidéos ne sont pas sur mon home

Dernière modification par NéoUbuntonien (Le 13/08/2015, à 07:43)

#6 Le 13/08/2015, à 07:55

pingouinux

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

# Nom du fichier sans l'extension .mp4

base=$(basename "$i" .mp4)

# On ajoute le dernier champ (la date) au 5ème, et on supprime le dernier champ (décrémentation du nombre de champs)

j=$(awk '{$5=$5" "$NF;NF-=1;print}' <<<"$base").mp4

Si je souhaite en faire un script, je me doute que je devrai débuter par un cd car les vidéos ne sont pas sur mon home

Oui, il faut se placer dans le bon répertoire.

Dernière modification par pingouinux (Le 13/08/2015, à 07:56)

Hors ligne

#7 Le 13/08/2015, à 09:24

credenhill

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

hello
enlever le -n si c'est ok, essayer

rename -n 's/(M6 - En famille - )(.*) (201[0-9_]*).mp4/$1$3 - $2.mp4/' M6*

Dernière modification par credenhill (Le 13/08/2015, à 09:32)

Hors ligne

#8 Le 14/08/2015, à 09:59

Compte anonymisé

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

@pingouinux

Je viens d'essayer

for i in M6*mp4
do
   base=$(basename "$i" .mp4)
   j=$(awk '{$5=$5" "$NF;NF-=1;print}' <<<"$base").mp4
   echo mv -i "$i" "$j"
done

J'ai dût mettre ces lignes dans fichier bash puis, exécuter le fichier via le terminal. Je pense qu'il n'y avait pas d'autre solution
Ça fonctionne nickel, par contre, ton explication j'ai du mal à comprendre : $5, $NF, NF-=1 et basename
Pour ce dernier est-ce un nom que tu as chois ou une instruction ?
Sans doute que je ne maîtrise pas suffisamment awk

Merci

-------------------------

@credenhill

Merci pour ta ligne qui semble plus facile à écrire sur le terminal
Je viens de l'essayer avec la copie que j'avais fait avant d'appliquer la solution de @pingouinux, et ça fonctionne également
La seule chose que je ne comprend pas c'est les $1,$2,$3, est-ce que tu pourrais m'expliquer ?

Dernière modification par NéoUbuntonien (Le 14/08/2015, à 10:16)

#9 Le 14/08/2015, à 11:23

credenhill

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

à gauche, on sépare le nom en 3 champs entre (), et on récupère ces champs à droite en permutant 2 et 3 avec $1 $3 $2
c'est l'équivalent en sed avec \1 \3 \2

Hors ligne

#10 Le 14/08/2015, à 11:28

Compte anonymisé

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Merci @credenhill
c'est parfaitement clair smile

#11 Le 14/08/2015, à 11:45

pingouinux

Re : [Résolu] Modification d'un nom de fichier (déplacement d'un élément)

Pour ma méthode (plus lourdingue que celle de credenhill), tu peux avoir des précisions dans la doc

man basename
man awk

NF est le numéro du dernier champ, et $NF son contenu
$5 est le contenu du 5ème champ
NF-=1 est équivalent à NF=NF-1

Hors ligne