Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
racourcir des nom de fichiers en masse
Envoyé par: bourane

salut!
voici le defi :
je possede un disque dur formaté en fatx (pour xbox) et je veux transferer des fichiers dessus mais il ne gere pas les noms de fichiers de plus de 30 caractères

j'ai donc lancé un # find -name '????????????????????????????*' affin de trouver les fichiers ne pouvant etre transferés
je cherche donc comment modifier ses noms de fichiers (effacer tous les caractères apres le 26ème et conserver l'extension)
j'ai essayé d'utiliser sed mais je n' ai pas trouver comment m'en servir pour mon probleme
je vous remercie d'avance bye

Poste le Thursday 21 April 2005 11:41:37
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: oudoubah

Regarde avec la commande cut.
Si tu as le nom, tu peux changer en faisant un truc du genre (dans un script):

extension=`cut -d"." nom_du_fichier -f 1`
nom=`cut -b 1-26 nom du fichier`
cp nom_du_fichier "/rep_out/$nom.$ext"

Je te conseille de copier les fichiers plutôt que de modifier les noms (on ne sait jamais).
Ensuite, c'est à incorporer dans un script.

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 21 April 2005 13:13:27
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bbourane

j'ai essayé mais cut me renvoie une partie du contenu de mon fichier donc ca va pas, il me faudrait la meme commande mais qui ne cherche pas dans le fichier mais dans son nom

Poste le Thursday 21 April 2005 13:47:04
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: oudoubah

Tu peux essayer alors comme ça:
extension=`echo $nom_fichier | cut -d"." -f 1`

Même principe pour les autres.

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 21 April 2005 14:00:32
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: nicola

L’extension peut s’obtenir avec basename, non ?

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Thursday 21 April 2005 14:15:14
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

j'ai deja essayé avec basename et je n'arrive pas a l'utiliser avec une variable
# i=/dir/dir2/fichier.ext
# basename $i
doit me donner fichier.ext or je recois une erreur (trop d'arguments) de plus il faut connaitre l'extension

Poste le Thursday 21 April 2005 14:46:33
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

merci
j'avance mais un dernier probleme :
comment rentrer la valeur de "echo $i | cut"." -f 1" dans une variable ?
j'ai testé mais :

sh-2.05b$ j='echo $i | cut -d"." -f 1'
sh-2.05b$ echo $j
echo $i | cut -d"." -f 1


Poste le Thursday 21 April 2005 14:59:38
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: oudoubah

`echo $i | cut -d"." -f 1`

avec `=alt gr 7

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 21 April 2005 15:49:59
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

#!/bin/sh
for i in ?????????????????????????*.??? ;
do fichier='echo $i | cut -d"." -f1' ;
ext='echo $i | cut -d"." -f2' ;
nom='basename "$fichier"' ;
chemin='dirname "$fichier"' ;
nom_modifie='echo $nom | cut -b 1-26' ;
fichier_final='echo $chemin$nom_modifie' ;
mv 'echo $i' 'echo $fichier_final' ;
done ;

voici la gueulle du script

Poste le Thursday 21 April 2005 16:25:04
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

#!/bin/sh
for i in ?????????????????????????*.??? ;
do fichier=`echo $i | cut -d"." -f1` ;
ext=`echo $i | cut -d"." -f2` ;
nom=`basename "$fichier"` ;
chemin=`dirname "$fichier"` ;
nom_modifie=`echo $nom | cut -b 1-26` ;
fichier_final=`echo $chemin$nom_modifie` ;
mv `echo $i` `echo $fichier_final` ;
done ;

comme ca c'est mieux mais ca ne marche pas (apparement toutes mes variables sont a 0)

Poste le Thursday 21 April 2005 16:33:49
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

mon script foncionne parfaitement mais il me reste quelques problèmes :
-on ne dois pas avoir d'espaces dans le nom et le chemin de fichier (a la limite c'est pas grave)
-il ne va pas chercher dans les sous dossiers, y aurait il un solution ? (la j'aimerais savoir sinon il ne sert a rien)

#!/bin/sh
for i in ?????????????????????????*.??? ;
do fichier=`echo $i | cut -d"." -f1` ;
ext=`echo $i | cut -d"." -f2` ;
nom=`basename "$fichier"` ;
chemin=`dirname "$fichier"` ;
nom_modifie=`echo $nom | cut -b 1-26` ;
fichier_final=`echo $chemin/$nom_modifie.$ext` ;
mv `echo $i` `echo $fichier_final` ;
done ;

Poste le Thursday 21 April 2005 19:26:22
Répondre     Citer    
Re: racourcir des nom de fichiers en masse

for i in $( find ./ -type f  )
do
rep=$(dirname $i)
fichier=$( basename $i)

if [ ${#fichier} -ge  30 ]
then
 mv $rep/$fichier $rep/${fichier:0:26}.${fichier##*.} 
else 
 mv $rep/$fichier $rep/$fichier
fi
 done

--
Brugmans Frédéric

[www.brugmans.net]
[triathlon.sport-challenge.be]

Poste le Thursday 21 April 2005 19:33:36
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: debusy

Si t'as une interface graphique, tu peux essayer krename, c'est un outil très puissant qui evite de se taper un script.

---
N'oublie pas que le grand chêne a été un jour un petit gland.

Poste le Thursday 21 April 2005 19:36:49
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

le voila qui recherche dans les sous dossier, il falait changer la 1er ligne:

for i in */?????????????????????????*.??? ;

par contre si quelqun a une idée pour les espaces je suis prenant

en tout cas merci beaucoup de m'avoir aidé a faire mon 1er script !

Poste le Thursday 21 April 2005 19:39:28
Répondre     Citer    
Re: racourcir des nom de fichiers en masse
Envoyé par: bourane

j'ai essayé ton script frédéric mais il ne fonctionne pas chez moi (mv me renvoie plein d'erreur , il semblerait que les sepaces le gene aussi

sinon j'aimerais le comprendre mais j'ai dja du mal pour le mien..

Poste le Thursday 21 April 2005 20:04:34
Répondre     Citer    
Re: racourcir des nom de fichiers en masse

Commence par virer les espaces des noms de fichiers et de répertoires

--
Brugmans Frédéric

[www.brugmans.net]
[triathlon.sport-challenge.be]

Poste le Thursday 21 April 2005 20:20:58
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
racourcir des nom de fichiers en masse
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons