#1 Le 23/03/2021, à 11: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, à 12:49)
Hors ligne
#2 Le 23/03/2021, à 12: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 le problème solutionné, 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, à 12: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, à 12:13)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 23/03/2021, à 12: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, à 12: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....
Dernière modification par Tawal (Le 23/03/2021, à 12: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, à 12:29
- Hizoka
Re : [RESOLU] Deplacer fichiers dans dossiers séparés
@Watael : Oui je l'ai corrigé
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
Dernière modification par Hizoka (Le 23/03/2021, à 12:30)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 23/03/2021, à 12:30
- Watael
Re : [RESOLU] Deplacer fichiers dans dossiers séparés
@Tawal: non. pas deux boucles.
@Hizoka : j'suis content, j'suis content...
Dernière modification par Watael (Le 23/03/2021, à 12:32)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 23/03/2021, à 12: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, à 12: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, à 12:45
- gascon
Re : [RESOLU] Deplacer fichiers dans dossiers séparés
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, à 12: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, à 13: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, à 16: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 :
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, à 16: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.
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, à 16: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, à 16: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, à 16:55)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 23/03/2021, à 16: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 le problème solutionné, 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, à 16: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, à 16:54)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 23/03/2021, à 16:54
- Tawal
Re : [RESOLU] Deplacer fichiers dans dossiers séparés
OK
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.
Maintenant, je comprends l'option -t
Dernière modification par Tawal (Le 23/03/2021, à 17: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