Linux Renommage / tronquage nom de fichiers
Résolu
diego92
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
diego92 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
diego92 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
je souhaite écrire un script de renommage de fichiers mais je n'y arrive pas.
Mon problème :
Dans un répertoire se trouve des fichiers de type :
ABCDEF_blablablablablablabla.extension
Comment faire pour les renommer en ne gardant que les 6 premiers caractères ABCDEF + l'extension ? ABCDEF.extensionn
Merci d'avance pour vos lumières !
je souhaite écrire un script de renommage de fichiers mais je n'y arrive pas.
Mon problème :
Dans un répertoire se trouve des fichiers de type :
ABCDEF_blablablablablablabla.extension
Comment faire pour les renommer en ne gardant que les 6 premiers caractères ABCDEF + l'extension ? ABCDEF.extensionn
Merci d'avance pour vos lumières !
A voir également:
- Linux Renommage / tronquage nom de fichiers
- Explorateur de fichiers - Guide
- Linux reader - Télécharger - Stockage
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
18 réponses
hello
$ ls ABCDEF_blablablablablablabla.extension XXXXXX_blablablablablablabla.extension $ $ rename 's/^(......).*\.(.*)/$1.$2/' * $ ls ABCDEF.extension XXXXXX.extension $
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
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.
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
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
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
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
"ç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 ]]
@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
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.
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!
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.
>
hmm, ksh est POSIX, et donc peut parfaitement effectuer les substitutions de paramètre que j'ai évoqué.
@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 ...
ok, tant qu'à utiliser sed, autant l'utiliser correctement
echo "$F" | sed 's/\([^_]*\).*\(\..*\)/\1\2/oui,oui, c'est illisible : c'est sed !
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 !
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 .*
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
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
Ca ne marche pas aussi ?