Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/10/2009, à 10: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, à 15:33)

Hors ligne

#2 Le 11/10/2009, à 11: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, à 11: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, à 11: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, à 11:50)

Hors ligne

#5 Le 11/10/2009, à 11: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, à 12: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, à 09: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, à 09: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, à 10: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, à 10: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 sad:(:(

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, à 10:46)

Hors ligne

#11 Le 12/10/2009, à 11: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, à 12: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, à 13: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, à 15: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, à 15:22

AnsuzPeorth

Re : [Résolu] Déplacer des fichiers

Faut chercher un peu qd même !
C'est bon pour une fois smile

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, à 15: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, à 15: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, à 18:13

yanick_cangaeld

Re : [Résolu] Déplacer des fichiers

Merci pour votre aide et pour vos explications

ça devrait bien me faire progresser smile

Hors ligne

#17 Le 12/10/2009, à 18:15

Totor

Re : [Résolu] Déplacer des fichiers

yanick_cangaeld a écrit :

ça devrait bien me faire progresser smile

La meilleure façon de progresser est de chercher par soi même hmm


-- Lucid Lynx --

Hors ligne

#18 Le 13/10/2009, à 08: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, à 10: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, à 10: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, à 12: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, à 15: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 hmm

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 ? sad

Tu peux me donner un coup de main ou m'aiguiller pour y parvenir ?

Hors ligne

#23 Le 13/10/2009, à 15: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, à 15: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, à 15: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