Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 24/02/2010, 09h49   #1
Invité de passage
 
Inscription : février 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 4
Points : 0
Points : 0
Par défaut Shell script pour ajouter l'extension à des fichiers doc et pdf

Bonjour à tous,
voilà, je dois mettre au point un script shell qui ajouterait l'extension qui va bien à un grand nombre de fichiers doc et pdf. Et franchement, je ne connais rien à la programmation, je vis un réel cauchemar
Si quelqu'un peut m'aider, ce serait vraiment magnifique !
peretoinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 10h50   #2
Invité de passage
 
Inscription : février 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 4
Points : 0
Points : 0
J'ai tenté ceci :

#!/bin/sh
for i in `ls -l|awk '{print $8}'`
do
var=$(file $i |grep -i pdf|awk '{print $2}')
if [ "$var" == "PDF" ]; then
echo $var ;
cp $i $i.pdf;
else
cp $i $i.doc;
echo "pas bon";
fi;

done

Mais il copie tous les fichiers en mettant l'extension .doc, ca n'a pas l'air de fonctionner pour les pdf.
La commande file * |grep -i pdf|awk '{print $2}' me resort pourtant bien PDF. Bouh...
peretoinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 10h55   #3
Membre éprouvé
 
Inscription : juillet 2006
Messages : 533
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 533
Points : 486
Points : 486
Comment represent tes fichiers doc et pdf? Ils ont des formats bien precis?
ttttnht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 11h01   #4
Invité de passage
 
Inscription : février 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 4
Points : 0
Points : 0
Raaah, ca marche, enfin on dirait, avec :
-------------------------
#!/bin/sh
for i in `ls -l|awk '{print $8}'`
do
var=$(file $i |grep -i pdf|awk '{print $2}')
if [ "$var" = "PDF" ]; then
cp $i $i.pdf;
else
cp $i $i.doc;
fi;

done
--------------------------

Vous imaginez pas ma joie
Merci tout de même
peretoinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 11h07   #5
Invité régulier
 
Inscription : février 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 7
Points : 6
Points : 6
Salut tu devrais essayer avec un seul '=' dans le if

tu peux essayer de lancer tes scripts comme ça pour voir la trace d'execution ça aide a débugger
Code :
$> bash -x monscript.sh
alexBzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 11h16   #6
Invité de passage
 
Inscription : février 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 4
Points : 0
Points : 0
Tout à fait, le problème c'était les 2 =
Merci
peretoinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 14h51   #7
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Non, mais ça_a va_a pas :
Code :
1
2
3
4
5
6
7
8
#!/bin/bash
for i in *; do
   if [[ "$i" = *\.[pP][dD][fF]$ ]]; then
      cp $i $i.pdf
   else
       cp $i $i.doc
   fi
done
à moins d'être lié au Original Bourne Shell...

de toute façon, on ne fait pas for item in $(ls) : c'est dégueu', ça oblige à des "circonvolutions" i nu tiles
N_BaH est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 19h02   #8
Membre Expert
 
Homme
budget et contrôle de gestion
Inscription : décembre 2006
Messages : 865
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : budget et contrôle de gestion
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 865
Points : 1 320
Points : 1 320
Salut,

Citation:
Envoyé par N_BaH
de toute façon, on ne fait pas for item in $(ls) : c'est dégueu', ça oblige à des "circonvolutions" i nu tiles
Je ne vois pas ce que tu veux dire. Tu pourrais expliciter s'il te plait (désolé mais j'aime bien comprendre ).
__________________
Winnt

C'est en Linuxant qu'on devient .... geek

Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo.
Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing.
Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing
Winnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 20h07   #9
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Disons que Bash est le shell par défaut pour Linux. Donc autant utiliser toute sa puissance plutôt que de se restreindre au shell original. D'où:
Code :
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
for fichier in ${1:-.}/*
do
  case $(file $fichier | cut -d ' ' -f 2) in
    PDF) [[ $fichier =~ .pdf$ ]] || mv $fichier $fichier.pdf ;;
    CDF) [[ $fichier =~ .doc$ ]] || mv $fichier $fichier.doc ;;
    OpenDocument) [[ $fichier =~ .odt$ ]] || mv $fichier $fichier.odt ;;
  esac
done
Explications:
  • On peut, si on veut, mettre un argument au script: c'est le répertoire où faire le travail. Sinon c'est le répertoire courant.
  • Si l'extension existe déjà, elle n'est pas ajoutée.
  • J'ai ajouté le format odt pour avoir un format complètement libre...
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 20h22   #10
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Citation:
Envoyé par winnt
Je ne vois pas ce que tu veux dire. Tu pourrais expliciter s'il te plait (désolé mais j'aime bien comprendre
Il y a un tas de commandes externes que Bash exécute en interne (par lui même : builtins, PE..), donc faire appel à des comandes externes quand "bash le fait tout seul"*...

*'y faut quand même écrire le code
N_BaH est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2010, 08h38   #11
Membre Expert
 
Homme
budget et contrôle de gestion
Inscription : décembre 2006
Messages : 865
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : budget et contrôle de gestion
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 865
Points : 1 320
Points : 1 320
Salut,

Reprenez moi si je dis une bêtise.

A ce que je comprends de ce fil si le fichier contient le terme PDF on lui ajoute l'extension pdf. Et s'il contient le terme DOC on lui ajoute l'extension doc.

D'ailleurs la maxime préférée de jmelyn me semble des plus appropriée sur ce fil. Le problème n'ayant pas été des plus clairement exposé.

Car à vos scripts je pense que la commande rename se substituerai très facilement.

Mais je dis ca je dis rien.
__________________
Winnt

C'est en Linuxant qu'on devient .... geek

Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo.
Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing.
Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing
Winnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2010, 16h33   #12
Invité régulier
 
Inscription : février 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 7
Points : 6
Points : 6
Salut Winnt ,

Ce n'est pas tout a fait le cas , le type de fichier(Pdf , doc et ODT est déterminé par la commande "file" , qui retourne le type de fichier (pratique ).
alexBzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 23h01.


 
 
 
 
Partenaires

Hébergement Web