Linux Renommage / tronquage nom de fichiers
Résolu/Fermé
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
-
20 sept. 2010 à 11:34
diego92 Messages postés 14 Date d'inscription lundi 20 septembre 2010 Statut Membre Dernière intervention 29 septembre 2010 - 29 sept. 2010 à 17:21
diego92 Messages postés 14 Date d'inscription lundi 20 septembre 2010 Statut Membre Dernière intervention 29 septembre 2010 - 29 sept. 2010 à 17:21
A voir également:
- Linux Renommage / tronquage nom de fichiers
- Wetransfer gratuit fichiers lourd - Guide
- Nom de l'adresse - Forum Consommation & Internet
- Trouver un nom avec une adresse ✓ - Forum Loisirs / Divertissements
- Trouver une adresse avec un nom de famille gratuit ✓ - Forum Mobile
- Le fichier à télécharger est la nouvelle note de service de votre entreprise. importez ce fichier dans le bon dossier sur l'espace pix cloud. donnez à ce fichier les mêmes droits d'accès que les autres notes de service. ✓ - Forum Windows
18 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 12:23
20 sept. 2010 à 12:23
hello
$ ls ABCDEF_blablablablablablabla.extension XXXXXX_blablablablablablabla.extension $ $ rename 's/^(......).*\.(.*)/$1.$2/' * $ ls ABCDEF.extension XXXXXX.extension $
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
Modifié par lami20j le 20/09/2010 à 12:05
Modifié par lami20j le 20/09/2010 à 12:05
Salut,
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
$ ls -1 *.extension ABCDEF_blablablablabla.extension XYZXYZ_blabla blablablablabla.extension p049784@FR20083393 ~ $ for f in *.extension;do mv -v "$f" "${f:0:6}.${f/*./}";done 'ABCDEF_blablablablabla.extension' -> 'ABCDEF.extension' 'XYZXYZ_blabla blablablablabla.extension' -> 'XYZXYZ.extension' $ ls -1 *.extension ABCDEF.extension XYZXYZ.extension
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 20/09/2010 à 12:13
Modifié par qqchquicommenceparQ le 20/09/2010 à 12:13
en bash :
var="ABCDEF_blablablablablablabla.extension" echo "${var::6}.${var##*.}" #ou echo "${var%%_*}.${var##*.}"Il me semble que c'est POSIX, donc, ça devrait fonctionner avec tous les shells POSIX.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
20 sept. 2010 à 12:15
20 sept. 2010 à 12:15
Salut,
donc, oui ils ont tous un underscore après les 6 première caractères, mais ils peuvent en avoir d'autres derrières ...
Donc "%%" plutôt ;-))
donc, oui ils ont tous un underscore après les 6 première caractères, mais ils peuvent en avoir d'autres derrières ...
Donc "%%" plutôt ;-))
echo "${var%%_*}.${var##*.}"
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
20 sept. 2010 à 11:54
20 sept. 2010 à 11:54
Salut,
Les noms de fichiers sont tous du type 6 lettres suivies d'1 underscore suivi d'un nombres quelconque de caractères suivis d'1 point et d'1 extension ?
En fait ont-ils tous un underscore ?
Les noms de fichiers sont tous du type 6 lettres suivies d'1 underscore suivi d'un nombres quelconque de caractères suivis d'1 point et d'1 extension ?
En fait ont-ils tous un underscore ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 12:03
20 sept. 2010 à 12:03
Bonjour, déjà, merci pour l'intérêt que tu portes à mon problème.
Pour te répondre plus précisément :
ABCD9F (6 caractère alpha numérique)
_ (tjs après les 6 première caractères)
blabla : n'importe quel caractère même un underscore !
.extension : tjs la même extension
donc, oui ils ont tous un underscore après les 6 première caractères, mais ils peuvent en avoir d'autres derrières ...
Merci d'avance
Pour te répondre plus précisément :
ABCD9F (6 caractère alpha numérique)
_ (tjs après les 6 première caractères)
blabla : n'importe quel caractère même un underscore !
.extension : tjs la même extension
donc, oui ils ont tous un underscore après les 6 première caractères, mais ils peuvent en avoir d'autres derrières ...
Merci d'avance
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 13:50
20 sept. 2010 à 13:50
Merci à tous pour vos réponses ... par contre cela ne marche pas.
J'ai oublié de vous précisez que j'étais en KSH (AIX)
Et j'ai un message d'erreur suivant :
0403-011 Substitution incorrecte pour cette commande
Du coup, retour à la case départ lol
J'ai oublié de vous précisez que j'étais en KSH (AIX)
Et j'ai un message d'erreur suivant :
0403-011 Substitution incorrecte pour cette commande
Du coup, retour à la case départ lol
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
20 sept. 2010 à 13:51
20 sept. 2010 à 13:51
Quelle solution qui ne marche et qui te renvoie l'erreur ?
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 13:59
20 sept. 2010 à 13:59
et avec
for F in ??????_*.* ; do mv $F $(echo $F|sed 's/^\(......\).*\./\1./') ; done
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 14:00
20 sept. 2010 à 14:00
Celles là :
for f in *.extension;do
mv -v "$f" "${f:0:6}.${f/*./}";done
ou
for file in $( ls ./); do
if [[ -f $file && $file = *.* ]]; then
mv $file "${file:0:8}.${file#*.}"
fi
done
for f in *.extension;do
mv -v "$f" "${f:0:6}.${f/*./}";done
ou
for file in $( ls ./); do
if [[ -f $file && $file = *.* ]]; then
mv $file "${file:0:8}.${file#*.}"
fi
done
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 20/09/2010 à 14:08
Modifié par qqchquicommenceparQ le 20/09/2010 à 14:08
"ça marche pas" n'est pas très informatif
"mes" expressions POSIX devraient fonctionner, si Ksh/AIX est POSIX (c'est pas dit)
for i in $(command)
est à proscrire ! (imagine qu'il y ait des espaces)
et ce sera plutôt, [[ -f $file ]] && [[ n'importe == quoi ]]
"mes" expressions POSIX devraient fonctionner, si Ksh/AIX est POSIX (c'est pas dit)
for i in $(command)
est à proscrire ! (imagine qu'il y ait des espaces)
et ce sera plutôt, [[ -f $file ]] && [[ n'importe == quoi ]]
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 14:12
20 sept. 2010 à 14:12
@qqchquicommenceparQ
"for i in $(command) est à proscrire !"
Pourquoi ?
Merci d'avance
@dubcek : Ta commande me fait disparaitre mes fichiers ?? impossible de remettre la main dessus lol
"for i in $(command) est à proscrire !"
Pourquoi ?
Merci d'avance
@dubcek : Ta commande me fait disparaitre mes fichiers ?? impossible de remettre la main dessus lol
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
20 sept. 2010 à 14:21
20 sept. 2010 à 14:21
Re,
Pourquoi ?
La réponse est entre les paranthèses.(imagine qu'il y ait des espaces)
Si tu ne crois pas, tu peux créer des fichiers avec un espace dans le nom et tu verras.
Quelque soit la solution que tu adopteras il faudra que tu nous montres commen nous l'avons fait (affiche la commande + le résultat) pour comprendre d'où viens ton erreur.
On ne pourra pas t'aider si tous ne nous aide pas.
Pourquoi ?
La réponse est entre les paranthèses.(imagine qu'il y ait des espaces)
Si tu ne crois pas, tu peux créer des fichiers avec un espace dans le nom et tu verras.
Quelque soit la solution que tu adopteras il faudra que tu nous montres commen nous l'avons fait (affiche la commande + le résultat) pour comprendre d'où viens ton erreur.
On ne pourra pas t'aider si tous ne nous aide pas.
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 14:23
20 sept. 2010 à 14:23
$ ls ABCDEF_blablablablablablabla.extension XXXXXX_blablablablablablabla.extension $ $ for F in ??????_*.* ; do mv $F $(echo $F|sed 's/^\(......\).*\./\1./') ; done $ ls ABCDEF.extension XXXXXX.extension $
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 20/09/2010 à 14:48
Modifié par qqchquicommenceparQ le 20/09/2010 à 14:48
désolé dubcek
Ha, non!
rename passe encore, même avec des points au lieu d'une expression, mais un sed à la place de bash, ou n'importe quelle substitution de paramètres POSIX, là, je dis non!
Ha, non!
rename passe encore, même avec des points au lieu d'une expression, mais un sed à la place de bash, ou n'importe quelle substitution de paramètres POSIX, là, je dis non!
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 14:51
20 sept. 2010 à 14:51
J'ai oublié de vous précisez que j'étais en KSH (AIX)
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 14:52
20 sept. 2010 à 14:52
La solution de dubcek marche !
Sinon, voilà ce que j'ai avec l'autre solution (mv)
>for f in *.csv;do mv -v "$f" "${f:0:6}.${f/*./}";done
ksh: "${f:0:6}.${f/*./}": 0403-011 Substitution incorrecte pour cette commande.
>
Sinon, voilà ce que j'ai avec l'autre solution (mv)
>for f in *.csv;do mv -v "$f" "${f:0:6}.${f/*./}";done
ksh: "${f:0:6}.${f/*./}": 0403-011 Substitution incorrecte pour cette commande.
>
Utilisateur anonyme
20 sept. 2010 à 14:53
20 sept. 2010 à 14:53
hmm, ksh est POSIX, et donc peut parfaitement effectuer les substitutions de paramètre que j'ai évoqué.
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 14:55
20 sept. 2010 à 14:55
sur AIX, c'est même pas sûr ... en remplaçant $() par '' ça fonctionne avec le plus archaique des sh
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 15:12
20 sept. 2010 à 15:12
@dubcek :
Ta substitution marche très bien ..; par contre je ne la comprend pas (lol, I am a débutant)
Par exemple, j'aimerais enlever l'extension, et ne garder que les 6premières lettres des fichiers ?
@qqchquicommenceparQ : Apparemment le fait que je sois en AIX bloque un peu. Ce n'est pas la première fois que je suis obligé de trouver d'autres méthodes pour de simples scripts ...
Ta substitution marche très bien ..; par contre je ne la comprend pas (lol, I am a débutant)
Par exemple, j'aimerais enlever l'extension, et ne garder que les 6premières lettres des fichiers ?
@qqchquicommenceparQ : Apparemment le fait que je sois en AIX bloque un peu. Ce n'est pas la première fois que je suis obligé de trouver d'autres méthodes pour de simples scripts ...
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 15:18
20 sept. 2010 à 15:18
$ ls ABCDEF_blablablablablablabla.extension XXXXXX_blablablablablablabla.extension $ $ for F in ??????_*.* ; do mv $F $(echo $F|sed 's/^\(......\).*/\1/') ; done $ $ ls ABCDEF XXXXXX $
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 20/09/2010 à 15:42
Modifié par qqchquicommenceparQ le 20/09/2010 à 15:42
ok, tant qu'à utiliser sed, autant l'utiliser correctement
echo "$F" | sed 's/\([^_]*\).*\(\..*\)/\1\2/oui,oui, c'est illisible : c'est sed !
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 15:53
20 sept. 2010 à 15:53
Lol, c'est clairement illisible, je n'y comprends rien !
Quelqu'un pourrait m'expliquer, c'est du chinois ? lol
En tout cas ça marche ! Merci à vous pour votre aide !
Quelqu'un pourrait m'expliquer, c'est du chinois ? lol
En tout cas ça marche ! Merci à vous pour votre aide !
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
20 sept. 2010 à 16:34
20 sept. 2010 à 16:34
sed 's/^\(......\).*/\1/'
on sauve les 6 premiers caractères dans un champ que l'on restitue à droite avec \1, donc on supprime le reste de la ligne identifié avec .*
on sauve les 6 premiers caractères dans un champ que l'on restitue à droite avec \1, donc on supprime le reste de la ligne identifié avec .*
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 16:38
20 sept. 2010 à 16:38
Cette solution finale marche parfaitement sous AIX (finalement j'ai viré l'extension)
J'aimerais déplacer les fichiers transformés, dans un autre répertoire. Y a t'il moyen de rajouter une instruction de déplacement ds la boucle for ?
Merci d'avance
cd $pathtemp; for test in *.toto ; do mv $test $(echo "$test" | sed 's/\([^_]*\).*/\1/'); done
J'aimerais déplacer les fichiers transformés, dans un autre répertoire. Y a t'il moyen de rajouter une instruction de déplacement ds la boucle for ?
Merci d'avance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
20 sept. 2010 à 16:41
20 sept. 2010 à 16:41
do mv $test /new_rep/$(echo "$test" | sed 's/\([^_]*\).*/\1/');
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
20 sept. 2010 à 17:22
20 sept. 2010 à 17:22
Merci, c'est good !
Franchement un grand merci à vous tous, je me sens un peu moins bête ce soir ;-)
@++
Franchement un grand merci à vous tous, je me sens un peu moins bête ce soir ;-)
@++
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
29 sept. 2010 à 16:45
29 sept. 2010 à 16:45
Re-bonjour,
mon script doit évoluer et mes connaissance de la commande SED sont trop limitées :-(
Je cherche maintenant à modifier mes noms de fichiers de la manière suivante ...
ABCDEF55_blablablablablablabla.extension en
en
ABCDEF46_blablablablablablabla.extension en
Autrement dit j'ai juste un changement des caractère [7-8] à faire et tjs 55->46
Merci d'avance
mon script doit évoluer et mes connaissance de la commande SED sont trop limitées :-(
Je cherche maintenant à modifier mes noms de fichiers de la manière suivante ...
ABCDEF55_blablablablablablabla.extension en
en
ABCDEF46_blablablablablablabla.extension en
Autrement dit j'ai juste un changement des caractère [7-8] à faire et tjs 55->46
Merci d'avance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
29 sept. 2010 à 16:48
29 sept. 2010 à 16:48
sed 's/55/46/'
diego92
Messages postés
14
Date d'inscription
lundi 20 septembre 2010
Statut
Membre
Dernière intervention
29 septembre 2010
29 sept. 2010 à 16:58
29 sept. 2010 à 16:58
Merci !
Par contre je n'avais pas préciser un truc. Je peux rencontrer plusieurs fois le nombre 55 (ds la partie blablabla de mon fichier) mais je ne dois changer que ceux en 7ème et 8ème position !
Par contre je n'avais pas préciser un truc. Je peux rencontrer plusieurs fois le nombre 55 (ds la partie blablabla de mon fichier) mais je ne dois changer que ceux en 7ème et 8ème position !
20 sept. 2010 à 12:46
Ca ne marche pas aussi ?
20 sept. 2010 à 12:51