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 23/03/2021, à 12:33

Cyril_8568

[RESOLU] Deplacer fichiers dans dossiers séparés

Bonjour,
Désolé si cela fait doublon, mais je n'ai pas trouver de sujet faisant référence à mon besoin.

Je cherche à déplacer des fichiers contenus dans un dossier, dans plusieurs dossiers portant le nom de chaque fichier.
Comme il y a plusieurs centaines de fichiers, j'imagine qu'il est possible d'automatiser la création de dossier et le déplacement des fichiers avec ces commandes find mkdir mv mais je suis complètement perdu.

En résumé:

Actuellement:
Dossier/fichier1
            /fichier2
            /fichier3
             ...

Mon souhait:
Dossier/nom du fichier1/fichier1
            /nom du fichier2/fichier2
            /nom du fichier3/fichier3
             ...

Merci d'avance.

Dernière modification par Cyril_8568 (Le 23/03/2021, à 13:49)

Hors ligne

#2 Le 23/03/2021, à 13:04

erresse

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Bonjour,
Tu veux faire un répertoire indépendant pour chaque fichier, avec le même nom que le fichier contenu ?
Dans quel but une telle organisation ? Parce-que là, de prime abord, ça paraît absurde et inutile...
Pourrais-tu préciser ton besoin si tu poursuis un but particulier ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 23/03/2021, à 13:07

Hizoka

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Salut,

attention, sous Linux un dossier est un fichier, tu ne peux donc pas avoir un dossier qui porte le même nom qu'un fichier.

Perso je ferais une boucle qui travaille les fichiers 1 à 1 :
Qui créer un dossier nom_du_fichier_sans_ext
Qui déplace le fichier dedans
genre :

for Fichier in *
do
  NomFichier="${Fichier%.*}" # Suppression de l'extension du fichier
  mkdir "$NomFichier"
  mv "$Fichier" "$NomFichier"
done

Mais attention, il faut être sur que tes fichiers ont une extensions.
Attention si des fichiers avec un même nom mais des extensions différentes existent, il faut ajouter une vérification pour voir si le dossier existe déjà.
Et mon exemple n'est pas récursif.

Et je rejoins erresse, quel est ton besoin ?

Dernière modification par Hizoka (Le 23/03/2021, à 13:13)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 23/03/2021, à 13:15

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Qui créer un dossier dossier_nom_du_fichier

facultatif.
le dossier étant renommé, il peut avoir un nom constant.

bof, pour les extensions : les dossiers aussi peuvent avoir un nom comportant une extension.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 23/03/2021, à 13:25

Tawal

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Hello,

Je propose ceci :

cd Dossier
mkdir temp

shopt -s nullglob

for fich in *
do
   if [ -f "$fich" ]
   then
      mv "$fich" temp/
   fi
done

for fich in temp/*
do
   nom_fich=${fich#temp/}
   mkdir "$nom_fich"
   mv "$fich" "$nom_fich/$nom_fich"
done

rm -d temp

Mais je vais me faire eng.... lol

Dernière modification par Tawal (Le 23/03/2021, à 13:26)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#6 Le 23/03/2021, à 13:29

Hizoka

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

@Watael : Oui je l'ai corrigé smile
Mais ça peut avoir un intérêt si le fichier n'a pas d'extension.
Eh, tu as vu, je n'ai pas utilisé de {} inutiles wink

Dernière modification par Hizoka (Le 23/03/2021, à 13:30)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 23/03/2021, à 13:30

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

@Tawal: non. pas deux boucles.

@Hizoka : j'suis content, j'suis content... lol

Dernière modification par Watael (Le 23/03/2021, à 13:32)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 23/03/2021, à 13:42

Tawal

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Je m'en doutais, je suis allé trop vite ...

En 1 seule boucle, en passant par un dossier temporaire :

cd Dossier
mkdir temp

shopt -s nullglob

for fich in *
do
   if [ -f "$fich" ]
   then
      mv "$fich" temp/
      mkdir "$fich"
      mv temp/"$fich" "$fich/$fich"
   fi
done

rm -d temp

Toujours pas bon ?

Dernière modification par Tawal (Le 23/03/2021, à 13:44)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#9 Le 23/03/2021, à 13:45

gascon

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

erresse a écrit :

Pourrais-tu préciser ton besoin si tu poursuis un but particulier ?

Un exercice pour apprendre a faire de petit script ?


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#10 Le 23/03/2021, à 13:48

Cyril_8568

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Merci pour tous ces retours,

Le but est de réorganiser ma bibliothèque qui est classé comme ceci:

tome unique/fichier1
                    /fichier2
                   /fichier3
                    ...
plusieur tome/serie1/fichier1
                                 /fichier2
                                /fichier3
plusieur tome/serie2/fichier1
                                 /fichier2
                                 ...

afin d'avoir un dossier par tome unique ou par série dans le même dossier.

Pour les fichiers avec le même nom, je vais refaire un vérification manuelle, mais normalement c'est déjà bien rangé.


Je viens d'essayer avec la proposition d'Hizoka,
et bien un grand Merci, mon problème est résolu.

Hors ligne

#11 Le 23/03/2021, à 14:50

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

@Tawal :
toujours pas.
je ne cd que si c'est vraiment indispensable (c'est des coups à se perdre, dans les longs scripts).
le mkdir tempDir doit être subordonné à l'existence d'un fichier.
si tu testes qu'un élément est bien un fichier, alors shopt -s nullglob n'est pas utile
et puisque le dossier est renommé dans la condition, sa suppression est devenue inutile.

PS: je préfère test aux crochets (au moins sur les forums), parce que cela exprime mieux le if command; then...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 23/03/2021, à 17:05

Tawal

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Merci de ces précisions (pour moi et les autres).

Le cd est là, juste pour dire qu'il faut être dans le dossier concerné.

Pour le reste ok, j'en prends note.

Par contre, je n'ai pas compris :

Watael a écrit :

puisque le dossier est renommé dans la condition, sa suppression est devenue inutile.

Tu parles du dossier tempDir ?


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#13 Le 23/03/2021, à 17:27

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Le cd est là, juste pour dire qu'il faut être dans le dossier concerné.

ce n'est pas indispensable. un petit Remplacement de paramètre sur $fich récupère le nom du fichier sans le chemin.
un jour, tu vas te demander en écrivant un script : « mais je suis où, là ? c'est quoi le chemin pour aller dans l'autre répertoire ?», et alors tu enlèveras tous les cd.
pas d'accolades, et travail à distance, c'est dans l'air du temps. hmm

oui, le tempDir est recréé et renommé pour chaque fichier, donc en sortant de la boucle il devrait ne plus exister (sous ce nom).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 23/03/2021, à 17:42

Tawal

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Ok pour tout sauf pour tempDir.
Dans mon exemple, ce dossier est créé avant la boucle et sert à y stocker (provisoirement) le fichier pour l'enlever du dossier courant et ainsi créer un dossier du même nom que le fichier.
Ce dossier (tempDir) ne contient qu'un fichier à la fois.

La commande mv ne crée pas de dossier, il faut que le dossier DEST soit existant pour pouvoir bouger le fichier dedans.

Non, franchement, je ne comprends pas. De plus, avec un test du script sans rm, le dossier temp reste présent.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#15 Le 23/03/2021, à 17:50

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

#!/bin/sh

source=/Chemin/sourceDIr"

for f in "$source"/*
do
   if test -f "$f"
   then
      mkdir tempDir          # répertoire créé
      mv -t tempDir/ "$f"
      mv tempDir "${f##*/}"  # répertoire renommé : "n'existe plus" (sous le même nom) !
   fi
done

Dernière modification par Watael (Le 23/03/2021, à 17:55)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 23/03/2021, à 17:50

erresse

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

Pour une fois, je pense que Watael aura lu "en diagonale" et a mal interprété ton script.
Pour le "problème" du renommage, je suppose que c'est cette commande qui lui a fait penser que tu renommais le dossier "temp" :

      mv temp/"$fich" "$fich/$fich"

Et pour la création / suppression du répertoire "temp", c'est toi qui as raison, ça se passe en-dehors de la boucle...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#17 Le 23/03/2021, à 17:53

Watael

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

ah, d'accord ! le répertoire temp est un répertoire de transit.
c'est retors.
je préfère la manière plus directe d'Hizoka.

Dernière modification par Watael (Le 23/03/2021, à 17:54)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#18 Le 23/03/2021, à 17:54

Tawal

Re : [RESOLU] Deplacer fichiers dans dossiers séparés

OK smile
Je viens de comprendre l'option -t de mv.
mv peut donc "tout" faire ici.

Merci.

Edit: Oui c'est retors, mais fait avec mes connaissances (pas d'utilisation de mv -t vu que je ne la comprenais pas).

Edit2: En fait, mon problème venait de pouvoir créer un dossier au même nom qu'un fichier dans ce même dossier.
L'option -t de mv fait ce travail en 1 ligne. cool. cool

Maintenant, je comprends l'option -t smile

Dernière modification par Tawal (Le 23/03/2021, à 18:07)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne