#1 Le 11/10/2009, à 09:51
- yanick_cangaeld
[Résolu] Déplacer des fichiers
Bonjour,
Comment sélectionner des fichiers avec la même extension et ensuite les ranger dans des répertoires dont les noms sont les noms des extensions ?
Ex : essai.c rangé dans le répertoire c
Dernière modification par yanick_cangaeld (Le 13/10/2009, à 14:33)
Hors ligne
#2 Le 11/10/2009, à 10:40
- genma
Re : [Résolu] Déplacer des fichiers
Tu as la commande mv. Tu fais un mv *.c ./c (si le répertoire c est au même endroit, sinon ce sera /chemin/chemin/c)
Tu peux aussi faire une boucle sur les différentes extensions. Tu peux aussi faire une création de répertoire pour les extensions existantes...
Tu t'y connais un peu en shell ou non? Demande ce que tu veux.
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#3 Le 11/10/2009, à 10:46
- genma
Re : [Résolu] Déplacer des fichiers
Je te mes un script rapide. Crée un fichier Script.sh dans le répértoire en question et tu colles dedans :
#!/bin/bash
for i in `ls |cut -d "." -f2`
do
mkdir $i
mv *.$i ./$i
done
Ensuite tu fais chmod +x Script.sh
./Script.sh
Et ça te fera ce que tu veux (avec un repertoire .sh dans lequel tu retrouveras le Script.sh)
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#4 Le 11/10/2009, à 10:47
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Je débute en shell et je ne m'y connais vraiment pas beaucoup
Tu peux aussi faire une boucle sur les différentes extensions. Tu peux aussi faire une création de répertoire pour les extensions existantes...
En fait c'est ça que je cherche à faire
Ex essai.c est sélectionné mais comme c n'existe pas il est créé automatiquement
Dernière modification par yanick_cangaeld (Le 11/10/2009, à 10:50)
Hors ligne
#5 Le 11/10/2009, à 10:57
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
ça m'affiche une erreur de syntaxe à la ligne 3 ?
Hors ligne
#6 Le 11/10/2009, à 11:17
- genma
Re : [Résolu] Déplacer des fichiers
Colles l'erreur. Tu as bien mis des ` et non des ' (c'est un apostrophe à l'envers)
Tu as bien fais chmod +x
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#7 Le 12/10/2009, à 08:07
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
J'ai fait un copier coller avec le script
Par contre je ne sais pas comment utiliser le script ? Il faut que je sois dans un répertoire particulier ? J'ai créer un répertoir nommé range avec des fichiers et des sous dossiers et quand je suis dans ce répertoire et que je veux lancer le script ça m'affiche ./script.sh: not found ?
Hors ligne
#8 Le 12/10/2009, à 08:51
- genma
Re : [Résolu] Déplacer des fichiers
Dans le répertoire range, tu crées script.sh
Ensuite, dans un terminal :
cd /cheminVersRange/range
chmod +x script.sh
./script.sh
Ca classera tous les fichiers de range dans les sous répertoires.
Je vais voir pour expliquer mon script en détail dans la journée.
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#9 Le 12/10/2009, à 09:08
- genma
Re : [Résolu] Déplacer des fichiers
Pour la variable i, prenant une valeur parmis les resultat de la commande shell incluse entre les ``
faire
créer repertoire appelé i
déplacé tous les fichiers ayant un nom de la forme *.i dans le repertoire i
fait (reboucle tant que i prend des valeurs)
Cas de `ls |cut -d "." -f2`
Pour le contenu du repertoire courant ls
On passe le résultat en entrée à la commande derrière le |
cut -d "." -f2 coupe chaque résultat de ls sur le motif . et ne garde que la partie droite
Si mon répertoire toto contient toto.c, titi.c, tata.xml et tutu.xml.
Je crée script.sh dans toto.
Je lance ./script.sh
`ls |cut -d "." -f2` me donne :
ls me donnne toto.c, titi.c, tata.xml et tutu.xml, script.sh
cut me donne c et xml (ça récupére les extensions des noms de fichiers)
Je vais donc boucler sur c, sh et xml (valeur que prendra i)
créer les répertoires c et xml
et déplacer toto.c, titi.c dans le repertoire c
et déplacer tata.xml et tutu.xml dans le repertoire xml
et déplacer script.sh dans le repertoire sh
Ca ne marche que pour des fichiers au même niveau que ton script.sh (pas dans des sous-répertoires)
Sinon, ce sera plus compliqué.
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#10 Le 12/10/2009, à 09:36
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Dans le répertoire range, tu crées script.sh
Je n'arrive pas à créer script.sh dans range :(:(
EDIT c'est bon je l'ai fait (suffit de chercher un peu et de tatonner beaucoup pfff)
Par contre quand j'exécute script.sh ça m'affiche ces erreurs pour tous les fichiers :
$ ./script.sh
mkdir: ne peut créer le répertoire `1': Le fichier existe
mv: ne peut évaluer `*.1': Aucun fichier ou dossier de ce type
mkdir: ne peut créer le répertoire `c': Le fichier existe
mv: ne peut évaluer `*.c': Aucun fichier ou dossier de ce type
2ème EDIT: en fait ça évalue les dossiers et les fichiers ne contenant pas d'extensions .
ça range bien les fichiers .c dans c mais ça ne range pas les fichiers.pas dans pas
J'ai créer les fichiers essai.c essaibis.c graphic.pas machin.1 1 pas toto.pas truc1 truc2 truc3 c
dans le répertoire courant qui s'appelle range
Dernière modification par yanick_cangaeld (Le 12/10/2009, à 09:46)
Hors ligne
#11 Le 12/10/2009, à 10:28
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Le code fonctionne bien pour des extensions à une lettre mais pour les autres comme '.pas' ?
Et comment faire pour que la boucle n'évalue pas les dossiers ou fichiers sans extension ?
Hors ligne
#12 Le 12/10/2009, à 11:52
- AnsuzPeorth
Re : [Résolu] Déplacer des fichiers
Bjr,
Vite fait (à tester):
#! /bin/bash
DOSSIER=/home/user/dossier
while read ligne
do
ext=${ligne#*.}
[ ! -d "$DOSSIER/$ext" ] && mkdir "$DOSSIER/$ext"
mv "$ligne" "$DOSSIER/$ext"
done < <(find "$DOSSIER" -maxdepth 1 -type f -name "*\.*")
exit
Indiquer la variable DOSSIER avec le dossier à traiter. (cela permet de ne pas devoir lancer le script depuis le dossier concerné).
Pour l'utiliser, comme tantôt, copier dans un fichier, le rendre exécutable, et le lancer en console (par exemple).
ps:cette solution sera plus longue que celle proposé avant, car les fichiers sont déplacés un par un, et non en groupe. Mais c'est facilement modifiable.
Et le script initiale devrait fonctionner, même avec des extensions de plus d'un caractère !
Dernière modification par AnsuzPeorth (Le 12/10/2009, à 12:01)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#13 Le 12/10/2009, à 14:09
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Le programme fonctionne parfaitement
J'aimerais juste le comprendre ligne par ligne et aussi ajouter des phrases àson exécution genre 'le répertoire c a ete créé' et le fichier 'essai.c a ete deplace dans c' ?
Hors ligne
#14 Le 12/10/2009, à 14:22
- AnsuzPeorth
Re : [Résolu] Déplacer des fichiers
Faut chercher un peu qd même !
C'est bon pour une fois
explications:
ext=${ligne#*.} > on recup extension
http://abs.traduc.org/abs-5.3-fr/ch09s02.html
[ ! -d "$DOSSIER/$ext" ] > verif de l'existence du dossier
le ! pour inverser.
http://abs.traduc.org/abs-5.3-fr/ch07s02.html
&& > ET
http://abs.traduc.org/abs-5.3-fr/ch03.html (vers le milieu de page)
commande find:
-maxdepth > descente dans les répertoires
-type f > fichier
-name "*\.*" > un point dans le nom de fichier
http://pwet.fr/man/linux/commandes/find
Pour sortir du texte
#! /bin/bash
DOSSIER=/home/user/dossier
while read ligne
do
ext=${ligne#*.}
[ ! -d "$DOSSIER/$ext" ] && mkdir "$DOSSIER/$ext" && echo "Dossier crée: $ext"
mv "$ligne" "$DOSSIER/$ext" && echo "Fichier: $ligne Déplacé vers:$DOSSIER/$ext"
done < <(find "$DOSSIER" -maxdepth 1 -type f -name "*\.*")
exit
Dernière modification par AnsuzPeorth (Le 12/10/2009, à 14:23)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#15 Le 12/10/2009, à 14:22
- genma
Re : [Résolu] Déplacer des fichiers
Tu ajoutes des lignes avec echo comme par exemple :
echo "le repertoire $i a ete crée"
echo "les fichiers $i ont été déplacés"
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#16 Le 12/10/2009, à 17:13
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Merci pour votre aide et pour vos explications
ça devrait bien me faire progresser
Hors ligne
#17 Le 12/10/2009, à 17:15
- Totor
Re : [Résolu] Déplacer des fichiers
ça devrait bien me faire progresser
La meilleure façon de progresser est de chercher par soi même
-- Lucid Lynx --
Hors ligne
#18 Le 13/10/2009, à 07:37
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
J'ai cherché par moi même mais c'est pas facile sans aide
J'ai encore un problème que je n'arrive pas à résoudre
dans le code pour afficher les actions :
mv "$ligne" "$DOSSIER/$ext" && echo "Fichier: $ligne Déplacé vers:$DOSSIER/$ext"
J'ai changé $DOSSIER/$ext par $ext pour faire plus propre
Mais j'arrive pas à changer l'affichage des fichiers ? J'ai essayé pas mal de truc mais je voudrais simplement l'affichage du fichier ?
Hors ligne
#19 Le 13/10/2009, à 09:44
- genma
Re : [Résolu] Déplacer des fichiers
Mais j'arrive pas à changer l'affichage des fichiers ? J'ai essayé pas mal de truc mais je voudrais simplement l'affichage du fichier ?
Mets un exemple de ce que tu veux comme phrase. On comprendra mieux ce que tu veux.
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#20 Le 13/10/2009, à 09:51
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
J'ai ça affiché à l'écran :
/home/yannick/range/essai.c déplacé vers :c
je voudrais supprimé une partie et avoir plutôt ça :
essai.c déplacé vers c
ça ferait largement mieux mais je n'arrive pas à trouver la formule ?
Hors ligne
#21 Le 13/10/2009, à 11:53
- AnsuzPeorth
Re : [Résolu] Déplacer des fichiers
Bjr,
basename est là pour ça !
Je te laisse un peu chercher....
http://abs.traduc.org/abs-5.3-fr/pt04.html
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#22 Le 13/10/2009, à 14:06
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
C'est sympa de me donner ce lien , le problème c'est de savoir l'utiliser
En fait j'ai réussi à changer $DOSSIER/$ext par $ext qui me donne bien uniquement le nom des dossiers mais je n'arrive pas à modifier $ligne pour n'avoir que le nom du fichier et pas son nom absolu ?
Tu peux me donner un coup de main ou m'aiguiller pour y parvenir ?
Hors ligne
#23 Le 13/10/2009, à 14:18
- gigiair
Re : [Résolu] Déplacer des fichiers
Exécuter une commande sur des fichiers répondant à des critères donnés, c'est typiquement le rôle de la commande find
Pour plus d'informations, lancer le programme
info
.
Si tu ne sais pas t'en servir tape h
Si tu sais,
m Finding files
te dira tout sur la commande find.
--
JJR.
Hors ligne
#24 Le 13/10/2009, à 14:26
- AnsuzPeorth
Re : [Résolu] Déplacer des fichiers
bjr,
echo $(basename "$ligne")
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#25 Le 13/10/2009, à 14:26
- yanick_cangaeld
Re : [Résolu] Déplacer des fichiers
Je comprends pas pourquoi tu me parles de la commande find alors que c'est au niveau de la commande mv et de echo "$ligne déplacé .... que j'ai des soucis ?
ça devrait être là que je devrais agir pour n'avoir que le nom du fichier et non son nom absolu ?
Hors ligne