# Déplacer dossiers et sous-dossiers, mais pas les fichiers



## jane23 (25 Août 2020)

Bonjour,

J'ai vu que le sujet avait déjà été traité mais je ne comprends pas trop... je vous prie de m'excuser.
J'ai réussi à trouver le "Terminal" mais après, je sèche sur la manip.

À l'époque, j'avais arrêté d'utiliser mon Mac et j'avais fait une copie sur mon dde.

Mais voilà, maintenant le truc s'est classé en dossiers et sous-dossiers et cela crée une arborescence trop importante !!

Je ne peux plus accéder à ma musique comme je le veux sachant qu il y a 29 500 chansons qui représentent 186 Go... ça fait très long. Un par un, le travail serait titanesque...

Merci pour votre aide

Cordialement,

jennifer


----------



## Membre supprimé 1129907 (25 Août 2020)

Donc déplacer tous les fichiers quelque part ?

Quel est le répertoire contenant tes fichiers et où veux-tu les avoir à la fin ?
Une fois tous les fichiers déplacés, on pourra supprimer les dossiers et sous-dossier.

Exemple : la commande suivante va chercher tous les fichiers avec l'extension m4a présent dans le répertoire music et les copier (par sécurité plutôt que de les déplacer pendant ce test) dans le répertoire "rep_fichier"

```
find "/Users/username/Music" -type f -name "*.m4a" -exec cp "{}" "/Users/username/rep_fichier/." \;
```

Si cela fonctionne bien :

tu peux remplacer le "cp" par un "mv" qui déplacera les fichiers
tu peux supprimer le la partie suivante pour déplacer tous les fichiers sans tenir compte du nom (cela ne déplacera pas les répertoire) : -name "*.m4a"

Donc cela peut servir de base pour ta demande


----------



## jane23 (26 Août 2020)

Bonjour,
Merci de ta réponse.

Oui, je veux créer un nouveau dossier avec tous les fichiers dedans. 

ex : nouveau dossier que j 'appelle par exemple _musique rangée_ puis  double clic habituel et hop toutes les chansons réunies d'un coup.

Le répertoire initial est dans le dossier iTunes = iTunes media =  Music et j'aimerais qu'il soit dans un dossier lambda comme dit plus haut.

Alors pour la manip, je dois aller dans le terminal ? et taper le bloc de code cité dans ton message ?

-----------------------------------

bon, je viens d'essayer de copier le bloc de code que tu as écris dans le terminal mais ça ne fait rien...
j'dois pas faire le bon truc, à mon avis


----------



## Membre supprimé 1129907 (26 Août 2020)

Donc dans le terminal, tape la commande suivante :

```
find ~/Music -type f -name "*.m4a" | head
```

Cela retourne-t-il bien des fichiers qui t'intéressent (10 pour ce test) ?

Passe la commande suivante dans le terminal :

```
mkdir ~/Musique_ok
```
Cela devrait te créer un dossier "Musique_ok" dans le répertoire de ton user

Si ces deux points sont bon, tu peux tester la commande suivante :

```
find ~/Music -type f -name "*.m4a" -exec cp "{}" ~/Musique_ok/ \;
```

Là cela devrait être bon et tu devrais avoir tes fichiers contenant l'extension "m4a" dans le dossier "Musique_ok"


----------



## jane23 (26 Août 2020)

Ça fonctionne. C'est incroyable ces lignes de codes ! c'est intriguant..

Donc, c'est entrain de déplacer les fichiers et non de les copier ? car j'ai mon disque de démarrage qui commence à me dire qu'il est presque plein... 'espace disque limité'

Ensuite je me rends compte que j'ai les chansons, comme prévu,  mais que les artistes n'apparaissent pas .. j'ai mal réfléchi à mon truc... bon bref..

Et ensuite, comment refaire la même manipulation mais avec les autres fichiers, autres que m4a ?

Oué ca y est, 'no space left on device'


----------



## Membre supprimé 1129907 (26 Août 2020)

Oui, par défaut j'ai fait "cp" dans la commande. Cela fait une copie et non un déplacement.
Plus pratique pour revenir en arrière s'il y a un point sur lequel réfléchir  

Pour annuler la commande du terminal en cours, utilise la combinaison :
ctrl+c

Tu peux supprimer le "Musique_ok" (le nouveau répertoire, pas l'ancien) qui nous a servi de test pour le moment.

Combien as-tu d'artiste à traiter ? Normalement, c'est le nom du premier répertoire.

Au lieu de :

```
find ~/Music -type f -name "*.m4a" -exec cp "{}" ~/Musique_ok/ \;
```
On peux utiliser ceci qui copiera tous les fichiers quelque soit leur extension :

```
find ~/Music -type f -exec cp "{}" ~/Musique_ok/ \;
```

Et plutôt que cp, on peut utiliser mv qui déplacera les fichiers. Mais là il faut être certain que le résultat est bien ok.
Une sauvegarde TimeMachine avant de faire cette méthode est recommandé.


Sinon pour explication : la commande "find" faire une recherche avec les paramètres indiqués (ici des élément de type fichier se finissant par m4a). J'utiliser son option "exec" qui permet de lancer une commande en utilisant ce qu'elle trouve.


----------



## jane23 (26 Août 2020)

Je ne sais comment comptabiliser le nombre de dossiers... j'ai l'impression que ça n'apparait nulle part.

Y'en a 52 par page et 186 Go en tout (29405 éléments) et le nom du premier répertoire, il me semble que c'est /user = musique = iTunes= iTunes media

J'ai une sauvegarde sur mon disque dur externe ; dans tous les cas, je ne perdrai rien mais d'accord pour info Time Machine.

Ok.. merci pour les explications. C'est vraiment intéressant.

Ne penses tu pas qu'il serait plus judicieux, finalement, de garder le premier dossier (nom de l'artiste) = double clic = les chansons, point, et de squeezer simplement les sous-dossiers ?
C'est possible de faire ça ?

Merci du temps que tu m'accordes


----------



## Membre supprimé 1129907 (27 Août 2020)

Vu ce que tu souhaites, on ne va pas pouvoir faire ça en une seule commande. Avec un script shell, par contre ce sera possible de faire ça assez facilement. Et de rajouter un peu plus de flexibilité/information lors de l'opération.

Pour récapituler :
• S'occuper uniquement des fichiers présents dans "~/Music/iTunes/iTunes Media/Music"
• Les déplacer dans un répertoire dédié : on reste bien sur le disque du mac ou tu veux faire ça sur un disque externe ? La solution du disque externe permettrait de faire une copie et donc de prendre le moins de risque possible. Le "~/Musique_ok" te convient comme base ou tu souhaites autre chose ?
• Que faire en cas de fichiers portant le même nom ? Conserver les deux en rajoutant un numéro à la fin ?

Si on a par exemple ceci :
~/Music/iTunes/iTunes Media/Music/rep1/rep2/fichier1
~/Music/iTunes/iTunes Media/Music/rep1/rep3/fichier2
~/Music/iTunes/iTunes Media/Music/rep4/rep5/fichier3
~/Music/iTunes/iTunes Media/Music/rep4/rep6/fichier4

Après le déplacement des fichiers, une arborescence comme celle-ci te convient bien ?
~/Musique_ok/rep1/fichier1
~/Musique_ok/rep1/fichier2
~/Musique_ok/rep4/fichier3
~/Musique_ok/rep4/fichier4

On pourrait même conserver la deuxième série de répertoire dans le nom des fichiers pour avoir ça. Cela éviterait le problème des fichiers portant le même nom.
~/Musique_ok/rep1/rep2_fichier1
~/Musique_ok/rep1/rep3_fichier2
~/Musique_ok/rep4/rep5_fichier3
~/Musique_ok/rep4/rep6_fichier4
"rep2_fichier1", "rep2-fichier1" ou même "rep2 fichier1". A toi de choisir le séparateur si on part sur cette solution.

A toi de voir ce que tu souhaites.
Je prendrais un peu de temps pour faire le script ensuite, cela ne devrait pas me prendre plus d'une 1h grand maximum (en incluant des tests). Mais il faudra attendre ce soir pour que ce soit terminé.


----------



## Membre supprimé 1129907 (27 Août 2020)

Bon, je ne vais pas m'embêter et conserver le nom des répertoires dans les fichiers 

Exemple :
~/Musique_ok/rep1/rep2 - fichier1
~/Musique_ok/rep1/rep3 - fichier2
~/Musique_ok/rep4/rep5 - fichier3
~/Musique_ok/rep4/rep6 - fichier4




Donc ouvre TextEdit, colle le code ci-dessous dedans et enregistre ça comme fichier nommé "musique.sh" dans ton répertoire de base (celui avec ton nom de user)

```
#!/bin/bash
source=$(echo ~/"Music/iTunes/iTunes Media/Music")
destination=$(echo ~/"Musique_ok")
#Fonction appellée par le find
function move_file {
  fichier_full="$1"
  rep_destination="$2"
  rep_base=$(echo ${fichier_full} | sed "s#^./##" | sed "s#/.*##")
  fichier_destination=$(echo ${fichier_full} | sed "s#^./${rep_base}/##" | sed "s#/# - #g")
  echo "${fichier_full}"
  if [ ! -d "${rep_destination}/${rep_base}" ] ; then mkdir "${rep_destination}/${rep_base}" ; fi
  mv "${fichier_full}" "${rep_destination}/${rep_base}/${fichier_destination}"
}
#Pour utiliser la fonction dans le find
export -f move_file
if [ ! -d "${destination}" ] ; then mkdir "${destination}" ; fi
cd "${source}"
find . -type f -exec bash -c 'move_file "{}" '"${destination}"'' \;
```

Ensuite, lance le Terminal. Il t'affichera le répertoire de ton user par défaut.
Passe alors la commande suivante pour rendre ce script exécutable.

```
chmod +x musique.sh
```

Il ne restera plus qu'à le lancer via la commande:

```
./musique.sh
```

Ce script t'affichera chaque fichier traité avant de le déplacer dans le répertoire.
Le répertoire de destination "Musique_ok" est créé automatiquement tout comme celui de l'artiste. Pas besoin de le créer de ton côté


----------



## jane23 (28 Août 2020)

Bonjour,

Je te remercie pour tes messages, ça a l'air top !
Je te prie de m'excuser pour hier, je n'étais pas dispo et avec le décalage horaire, métropole, caraïbes... ça fait long sans réponse.
Je vois ça dans la journée...

Je te suis vraiment reconnaissante.
Je te tiens au courant


----------



## jane23 (6 Septembre 2020)

bonjour,
ok, ca y est. il est 9h48, nous sommes dimanche. j'ai du temps devant moi pour bien me concentrer et suivre tes instructions.
encore désolée pour ne pas m être connectée depuis ce temps.

bon et bien.. je ne sais pas si tu auras le temps mais je ne parviens pas à enregistrer le code dans text édit sous ".sh" dans le répertoire de base.
ils disent l'extension exigée est ".rtf"


----------



## Membre supprimé 1129907 (6 Septembre 2020)

Choisis comme format "texte" et ce sera possible :  "convertir au format texte"


----------



## jane23 (6 Septembre 2020)

OK. J'ai réussi * musique.sh* mais après, non
je t'envoie la capture d 'écran :




J'ai essayé la première commande= enter= puis la 2e commande... rien
du coup, j'ai essayé 1ère et 2e commande en même temps... et rien...

C'est quoi que je loupe ?


----------



## Membre supprimé 1129907 (6 Septembre 2020)

A priori le fichier musique.sh n'est pas bon. Le message indique qu'il s'agit d'un répertoire   
Peux-tu vérifier via le Finder ? Si c'est le cas, efface le (s'il n'y a rien dedans) et recommence la création du fichier via textedit.


----------



## jane23 (6 Septembre 2020)

Et bah écoute, ça a marché!!! 
C'est top!! je suis vraiment heureuse. J'ai bien les noms des artistes puis clic puis toutes leurs chansons..
Par contre, ça a marché pour 23 762 éléments sur les 29 405 de départ..

Je viens de recalculer... par lire les infos... en fait y'a 31 800 éléments (c'et bizarre d'ailleurs, par rapport au nombre que je t'ai donné la dernière fois... je suis certaine de ne pas avoir ajouté de musique dans le dossier toshiba zikjen...)
Je t'envoie une copie d'écran :


----------



## Membre supprimé 1129907 (6 Septembre 2020)

C'est sans doute la limite du find  
Relance le script, s'il reste des fichiers à déplacer il le fera. Il reprendra là où il en était

Donc juste cette commande à repasser :

```
./musique.sh
```


----------



## jane23 (6 Septembre 2020)

je ne parviens pas à aller plus loin que 23 778..
j'essaie de trouver manuellement des chansons qui pourraient manquer mais je ne trouve pas.


----------



## Membre supprimé 1129907 (6 Septembre 2020)

En élément de départ, les sous-répertoires doivent être comptés, donc cela fera une différence en nombre d'élément.

Par contre la différence de taille me gène plus. Normalement pas de doublons car les fichiers contiennent le nom des répertoires source. Donc il doit manquer quelque chose mais quoi ?


----------



## jane23 (6 Septembre 2020)

Et oué... 
Je crois des chansons par ci par là...
Par exemple, je viens de trouver 3 mix (hvob) en dehors de dossier qui ne se trouvent pas dans musique ok... 
capture d'écran :


----------



## Membre supprimé 1129907 (6 Septembre 2020)

Je vois, sans doute un problème avec certains caractères. Je regarderai ça en détail demain soir


----------



## jane23 (6 Septembre 2020)

daccord, bonne nuit.


----------



## Membre supprimé 1129907 (7 Septembre 2020)

Tant que j'y pense, la commande suivante te permettra de voir les fichiers qui n'ont pas pu être traités   

```
find ~/"Music/iTunes/iTunes Media/Music" -type f
```


----------



## jane23 (7 Septembre 2020)

ok. c'est fait mais ça ne me sort pas grand chose


----------



## Membre supprimé 1129907 (7 Septembre 2020)

Bon, j'ai fait quelques tests et les caractère suivants ne posent pas de problème au script : &, |, '
Même si j'ai catalina, cela ne devrait rien changer pour les fonctions de mon script.


Par contre je viens de voir un détail important qui semble commun à 3 de tes fichiers. En tout cas aux deux pour lesquel tu as affiché les infos et qui m'interpelle surtout sur le premier.

Le titre est : "HVOB | One Year of madness Mix | EB.radio"
Mais le nom est : "HVOB *_* One Year of madness Mix | EB.radio"
Le premier "|" ne s'affiche pas pareil dans le nom du fichier et c'est pareil pour ton 2ème fichier. Sans doute pareil pour celui en bas du Finder.


Un problème de droit des répertoires ou fichiers peu aussi gêner, mais cela m'étonnerait. Cela n'empêche pas de tester.

Si tu passes les commandes suivantes dans le terminal, la partie de gauche devrait commencer par ces 4 lettres "drwx"

```
ls -ld ~/"Music/iTunes/iTunes Media/Music/Unknown Artist"
ls -ld ~/"Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album"
```

Et dans le cas suivant, cela commencera par "-rw-"

```
ls -l  ~/"Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album"
```

Pour cette dernière commande, je veux bien que tu montres le résultat correspondant à certains fichiers posant problème. Cela me donnera sans doute une piste.


----------



## jane23 (7 Septembre 2020)

voici la capture d'écran :





je peux essayer de trouver d 'autres fichiers qui n'ont pas été pris en compte afin que tu puisses peut être voir autre chose


----------



## Membre supprimé 1129907 (7 Septembre 2020)

Non, pas besoin. Il ne semble rien n’y avoir d’anormal... Et certains fichiers semblent n’avoir aucun caractère spécial.


----------



## jane23 (7 Septembre 2020)

par exemple, xx long intro version .. qui ne s est pas enregistré dans musique ok
ou tratosphère également.
apres, des fichiers en dehors de dossiers comme ces 2 derniers titres, ça ne fait pas les 8 000 éléments manquants..



ecatomb a dit:


> Non, pas besoin. Il ne semble rien n’y avoir d’anormal... Et certains fichiers semblent n’avoir aucun caractère spécial.


 ah merde, j'avais pas vu que t avais répondu


----------



## Membre supprimé 1129907 (8 Septembre 2020)

Peux-tu lancer cette commande ?

```
./musique.sh 2> musique.log
```

Cela refera tourner le script mais en enregistrant les message d'erreur dans un fichier musique.log
S'il contient bien des informations, ce sera top. Car actuellement, je n'ai aucune idée de la source du problème...


----------



## sinbad21 (8 Septembre 2020)

Bonjour,

Je me suis amusé avec le script et je pense savoir d'où vient le problème. Pour simplifier, j'ai juste travaillé sur un dossier source comprenant 4 dossiers avec de la musique à  l'intérieur et deux images à la racine du dossier, et j'ai remplacé le mv par un cp.

Le résultat, c'est que tout ce qui était dans les sous-dossiers a été correctement copié, mais les images, qui sont à a racine de mon dossier, ont été copiées sous forme de dossiers vides.

Deux copies d'écran pour mieux comprendre :

- dossier original :






- dossier cible :





Les deux jpeg ont été transformées en dossiers vide, et la taille de chacun de ces dossiers correspond à la taille du jpeg original.


----------



## Membre supprimé 1129907 (8 Septembre 2020)

Oui, j'ai eu le cas aussi lors d'un test. C'est parce qu'il n'y a pas d'artiste/album de défini qu'il s'emmêle les pinceaux.
Il faudrait que je rajoute un test pour éviter cela.

Mais ce n'est pas le bug ici présent vu que les fichiers sont dans "Unknown Artist/Unknown Album". Sinon, ils seraient déjà renommés en tant que répertoire et plus présent dans le répertoire source.


----------



## sinbad21 (8 Septembre 2020)

ecatomb a dit:


> Oui, j'ai eu le cas aussi lors d'un test. C'est parce qu'il n'y a pas d'artiste/album de défini qu'il s'emmêle les pinceaux.
> Il faudrait que je rajoute un test pour éviter cela.
> 
> Mais ce n'est pas le bug ici présent vu que les fichiers sont dans "Unknown Artist/Unknown Album". Sinon, ils seraient déjà renommés en tant que répertoire et plus présent dans le répertoire source.


Tu veux dire que les fichiers dans Unknown Artits/Unknown Album n'ont pas été traités ? C'est un autre bug effectivement.


----------



## Membre supprimé 1129907 (8 Septembre 2020)

Oui, une partie des fichiers non traité sont bien dans "Unknown Artist/Unknown Album" et il ne semble pas y avoir de problème de droit d'accès.


----------



## jane23 (8 Septembre 2020)

voici ce que ça donne avec la manip que tu m as demandé ci dessus


----------



## Membre supprimé 1129907 (9 Septembre 2020)

Ok, donc il y a bien un problème avec les noms ou autre. Il n'arrive pas à trouver les fichiers et/ou répertoires.

Peux-tu regarder pour l'un des fichiers si le nom source (répertoire et fichier) est bien identique à celui que tu as chez toi ?
Et aussi si le répertoire de l'artiste a bien été créé dans musique_ok ?

Merci. Je regarderais plus en détail ce soir.


----------



## sinbad21 (9 Septembre 2020)

Mon hypothèse est que certains noms de fichiers comportent des caractères invalides mais invisibles. À la place il y a un blanc ou un point par exemple, mais si on ouvre la chaîne de caractères dans un éditeur hexadécimal on verra que ce qui s’affiche comme un blanc a une valeur hexadécimale différente de x’20’.

Il faudrait un script qui parcourt le dossier Musique et qui liste tous les éléments ayant un nom avec des caractères spéciaux ou non éditables.


----------



## Membre supprimé 1129907 (9 Septembre 2020)

Je penche aussi pour cette idée.


----------



## jane23 (9 Septembre 2020)

Bonjour,

Alors, désolée, j'ai pas très bien compris ce que je devais faire... entre le nom source, répertoire, chez moi et musique ok..
Alors, j'ai pris un fichier sur le DDE Toshiba et j'ai repris le même dans musique ok. Le nom ne s'est pas écrit pareil
et oui, le répertoire de l'artiste est dans musique ok
voici les captures :






dis moi si c'est ça


----------



## Membre supprimé 1129907 (9 Septembre 2020)

Désolé de ne pas avoir été clair, j'ai écris trop rapidement ...

Je voulais parler d'un fichier qui est dans le "musique.log" comme le "13 0 for Boban" (pas certain de bien l'écrire).
Regarde si le nom des répertoires présent dans le "musique.log" est bien écrit comme celui des répertoires que tu vois dans le Finder (qu'il n'y a pas un seul caractère différent). Idem avec le nom du fichier.

SI c'est bien identique, peux-tu faire une copie de la ligne correspondant dans le "musique.log" ici ? Je te donnerais ensuite des commandes à faire permettant de savoir quel répertoire pose problème (ou si c'est bien le nom du fichier).


----------



## jane23 (9 Septembre 2020)

malgré tes explications, c'est encore pas bien clair...
je vais faire de mon mieux
jcrois que j'ai du mal à comprendre la dif entre répertoire et dossier et si je cherche bien au bon endroit dans le finder.

dans le finder , dans " tous mes fichiers" toute la liste donnée de "musique.log" n existe pas..

pour " 13 0 for boban"
écriture du dossier: même caractères
écriture du fichier: non
apparait dans:  i tunes media + toshiba


j 'ai trouvé :
dr dre/ the chronic - the 0 sack pyramid.

écriture du dossier: même caractères
le fichier " le titre de la chanson":  n 'a pas les mêmes caractères
apparait: i tunes media+ toshiba
capture d' écran ci jointe.


pour  iggy azalea:

écriture du dossier ( bien en majuscules) : même caractères
sous dossier = nom de l 'album) : écrit pareil.
le fichier: n ' pas les mêmes caractères.
apparait dans toshiba+ iTunes media.
capture d 'écran jointe

pour lisa otto:

écriture du dossier: même caractères
écriture du fichier: c'est la même sauf le dernier mot et le chiffre " gesang 3"
apparait dans i tunes media et toshiba
capture d'écran

donc, tout est identique sauf les nom des fichiers ...


----------



## Membre supprimé 1129907 (10 Septembre 2020)

A savoir pour les captures d'écran, cela t'évitera de faire une copie de tout l'écran :
⇧⌘3 : capture tous les écrans
⇧⌘4 : capture une zone
⇧⌘4 + espace : capture une fenêtre
⇧⌘5 : barre de raccourcis (permet d'avoir un minuteur)
⇧⌘6 : capture de la Touch Bar

Répertoire = dossier, c'est bien la même chose. Juste deux façon de dire.



jane23 a dit:


> pour " 13 0 for boban"
> écriture du dossier: même caractères
> écriture du fichier: non
> apparait dans:  i tunes media + toshiba



Donc tu n'as pas ce fichier dans le Finder mais bien les "dossiers" correspondant ? Il ne peux pas y avoir d'erreur dans le nom ?



Pour tes 3 autres fichiers, peux-tu copier comme texte le nom du fichier du Finder et celui présent dans le musique.log ? Parce que dans tes capture d'écran, c'est pas très pratique et 2 caractères peuvent très bien s'afficher quasi pareil et être différent. Exemple I (i) et l (L)




log : 10 The 0 Sack Pyramid
finder : 10 The $20 Sack Pyramid

Donc à priori, une partie des caractères posant problème seraient :

$
"
Qu'affiche la commande suivante si tu la passes dans le terminal (j'espère ne pas avoir fait de faute dans les noms de dossier) ?

```
ls -l ~/"Music/iTunes/iTunes Media/Music/Dr. Dre/The Chronic"
```


----------



## jane23 (10 Septembre 2020)

bonjour,

merci pour les précisions.
alors dans le finder (qui est donc je pense 'tous mes fichiers' )aucun des titres n apparait. ils apparaissent dans les dossiers correspondants oui.

 captures decran du musique.log 
capture d 'écran de toshiba

enfin, dans le terminal ça affiche avec le bon caractère "le dollar". capture d'écran


----------



## Membre supprimé 1129907 (10 Septembre 2020)

Ok parfait, donc le terminal voit normalement bien les fichiers, mais dans mon script il doit le voir avec un caractère différent. Je vais pouvoir faire des tests de mon côté dans ce cas.


----------



## jane23 (10 Septembre 2020)

merci


----------



## Membre supprimé 1129907 (10 Septembre 2020)

Voilà, j'ai fait une nouvelle version qui ne va plus avoir de problème.
C'était le système d'appel de fonction via le find qui posait problème. J'ai donc fait autrement en passant via un fichier temporaire (listemusique.txt). Cela te permettra d'avoir une liste des fichiers normalement traités au passage.
J'ai aussi résolu le bug indiqué par @sinbad21 des fichiers sans répertoires. Ils ne seront plus traités dans cette version.

Remplace le contenu de l'ancien fichier "musique.sh" par le code ci-dessous

```
#!/bin/bash

source=$(echo ~/"Music/iTunes/iTunes Media/Music")
liste_fic=$(echo ~/"listemusique.txt")
destination=$(echo ~/"Musique_ok")

if [ ! -d "${destination}" ] ; then mkdir "${destination}" ; fi
cd "${source}"
#find . -type f | grep -v ".DS_Store" > "${liste_fic}"
find . -type f | grep ".*/.*/.*" > "${liste_fic}"

while IFS= read -r fichier_full
do
  rep_destination="${destination}"
  rep_base=$(echo ${fichier_full} | sed "s#^./##" | sed "s#/.*##")
  fichier_destination=$(echo ${fichier_full} | sed "s#^./${rep_base}/##" | sed "s#/# - #g")

  if [ ! -d "${rep_destination}/${rep_base}" ] ; then mkdir "${rep_destination}/${rep_base}" ; fi
  echo "${fichier_full}"
  mv "${fichier_full}" "${rep_destination}/${rep_base}/${fichier_destination}"
done <  "${liste_fic}"
```

Ensuite, tu peux le lancer dans le terminal via la commande

```
./musique.sh
```


----------



## jane23 (11 Septembre 2020)

d accord mais est ce qu avant de faire tout ça, je dois effacer "musique ok "?


----------



## Membre supprimé 1129907 (11 Septembre 2020)

Non, surtout pas. Sinon tu perdras ce qui y a déjà été déplacé.
Il n’y a que le script à mettre à jour et relancer. Il y rajoutera alors les fichiers manquants.


----------



## jane23 (11 Septembre 2020)

ok...
c'est fait.
je suis à 24000 éléments sur 31 800...
je ne sais pas quoi dire..


----------



## Membre supprimé 1129907 (11 Septembre 2020)

Et niveau espace disque ?

Passe cette commande dans le terminal, cela devrait lister tous les fichiers restant dans un fichier nommé "listemusique_fichier.txt". Ca me permettra d'avoir une idée sur ce qui n'a pas été traité.

```
find ~/"Music/iTunes/iTunes Media/Music" -type f > ~/"listemusique_fichier.txt"
```


----------



## jane23 (12 Septembre 2020)

La commande ne donne plus rien.
au niveau espace disque, ça donne :
musique.ok: 188,33 Go
toshiba zic jen: 225,93 Go

Tu crois que ce serait possible que tu prennes le contrôle de l'ordi pour voir directement, que ça soit plus facile pour toi ?

En tout cas, je vais continuer à chercher manuellement de mon coté, pour voir si je vois des artistes qui n'ont pas été transférés

---------------------------

alors, je trouve un dossier avec 7 Go à l'intérieur qui n'a apparemment pas été transféré dans musique.ok qui s'appelle : musique guate
J'en trouve un autre avec 37 Go appelé guyane
en fait, y'a des dossiers dans des dossiers ! dans le dossier toshiba

Je trouve aussi d'anciens fichiers de GarageBand que je ne peux plus écouter... ça a disparu
Un dossier avec des vidéos : je l'ai mis ailleurs. Je continue...

Si je fais bien le calcul, ces 2 dossiers (musique guatemala et guyane), ensemble, font environ 45,39 Go et la différence des de musique.ok et toshiba sic j'en est de 37,6 Go
C'est très bizarre, y'en a plus que prévu, mais ça passe. il ne manque rien... au contraire même


----------



## Membre supprimé 1129907 (12 Septembre 2020)

jane23 a dit:


> la  commande ne donne plus rien..
> au niveau espace disque, ça donne :
> musique.ok: 188,33 go`
> toshiba zic jen: 225,93 go



La commande liste les fichiers restant, mais cette liste est dans le fichier "listemusique_fichier.txt". As-tu ouvert ce fichier pour voir ce qu'il y avait ?



jane23 a dit:


> alors, je trouve un dossier avec 7go à l'intérieur qui n a apparemment pas été transféré dans musique.ok qui s appelle: musique guate
> j'en trouve un autre avec 37go appelé guyane
> en fait, y'a des dossiers dans des dossiers ! dans le dossier toshiba
> 
> ...


Donc des dossiers non traités ?
Ils ne sont peut-être pas dans "Musique/iTunes/iTunes Media/Music" mais dans un autre répertoire de "Musique" ?

Il suffirait de changer le nom de la source (ligne ci-dessous du script) pour les prendre en compte si c'est le cas.

```
source=$(echo ~/"Music/iTunes/iTunes Media/Music")
```

Mais si c'est le cas, on risque de traiter des fichiers temporaire de iTunes et donc de casser des choses...


----------



## jane23 (13 Septembre 2020)

Voici ce qu 'il y a dans listemusique... txt




Oui tu as raison. ces 2 dossiers ne sont pas dans iTunes media.
On avait tout transféré à partir de quel dossier racine ? je ne me souviens plus...
Je pensais qu'on l'avait fait depuis le DDE, à partir de "zicjen"

Je pense qu'on va laisser comme ça. Tu as été vraiment super.  Je redécouvre ma musique, laissée de côté depuis plusieurs années, et ce grâce à toi !

Je voudrais te demander une dernière chose :

Je me rends compte que dans mes différents dossiers de musique (les 2 dossiers en question + d'autres en dehors de zicjen), j'ai fait des copies de copies de certains titres au fil du temps pour être sûre de ne pas en perdre et parce que je n'avais pas une vue claire (artiste - album - titres) de ce que j'avais déjà...
Bref, comment je pourrais faire pour enlever les doublons et ne faire qu'un dossier, une bonne fois pour toutes ?


----------



## Membre supprimé 1129907 (14 Septembre 2020)

Au début on cherchait dans le dossier musique (~/Music)
Dans les scripts, je cherche dans un sous-dossier de musique (~/"Music/iTunes/iTunes Media/Music")

Voici une version modifiée qui va chercher dans le dossier musique (~/Music) sans traiter les sous-dossier "iTunes" et "Music" qu'il contient. 


```
#!/bin/bash

#source=$(echo ~/"Music/iTunes/iTunes Media/Music")
source=$(echo ~/"Music")
liste_fic=$(echo ~/"listemusique.txt")
destination=$(echo ~/"Musique_ok")

if [ ! -d "${destination}" ] ; then mkdir "${destination}" ; fi
cd "${source}"
find . -type f | grep -v "^./iTunes" | grep -v "^./Music" | grep -v ".DS_Store" | grep ".*/.*/.*" > "${liste_fic}"

while IFS= read -r fichier_full
do
  rep_destination="${destination}"
  rep_base=$(echo ${fichier_full} | sed "s#^./##" | sed "s#/.*##")
  fichier_destination=$(echo ${fichier_full} | sed "s#^./${rep_base}/##" | sed "s#/# - #g")
  if [ ! -d "${rep_destination}/${rep_base}" ] ; then mkdir "${rep_destination}/${rep_base}" ; fi
  echo "${fichier_full}"
  mv "${fichier_full}" "${rep_destination}/${rep_base}/${fichier_destination}"
done <  "${liste_fic}"
```

Si tes fichiers ne sont que des mp3 et bien dans le dossier musique, tu peux aussi utiliser cette ligne pour la commande find (dans le script précédent)

```
find . -type f -name "*.mp3" | grep ".*/.*/.*" > "${liste_fic}"
```

Si tes fichier sont une autre extension, tu peux faire pareil mais en modifier "mp3" par l'extension de tes fichiers musicaux (exemple : "m4a") dans la commande précédente.

A voir dans tout les cas s'il n'y aura pas une modification à faire dans les noms des fichiers/dossiers créés.

A faire attention avec les nom pour que cela ne touche pas à des fichiers temporaires de l'application musique comme les artworks. 



jane23 a dit:


> Je me rends compte que dans mes différents dossiers de musique (les 2 dossiers en question + d'autres en dehors de zicjen), j'ai fait des copies de copies de certains titres au fil du temps pour être sûre de ne pas en perdre et parce que je n'avais pas une vue claire (artiste - album - titres) de ce que j'avais déjà...
> Bref, comment je pourrais faire pour enlever les doublons et ne faire qu'un dossier, une bonne fois pour toutes ?



Cela doit être possible. La commande cksum permet de savoir si 2 fichiers sont normalement identiques (elle ne tient pas compte du nom).
Exemple :

```
$ cksum * | sort
cksum: musique: Is a directory
2027254927 991 musique.sh
2027254927 991 musique.sh_doublon
2152302993 47492 test
936731427 13791 listemusique 23.11.37.txt
```
Comme tu peux voir, les nombres des fichiers "musique.sh" et "musique.sh_doublon" sont bien identiques. Mais il y a peut-être plus pratique.

Si toutes les musiques sont bien dans un dossier de "Musique_ok", tu peux faire la commande suivante dans le terminal. Elle te créera un fichier liste_doublon.txt avec ces nombres. Mais il faudra sans doute vérifier de ton côté si c'est bien le cas avant de supprimer l'un des doublons.

```
$ cksum ~/"Musique_ok"/*/* | sort > liste_doublon.txt
```


----------



## jane23 (25 Septembre 2020)

bonjour,
excuse moi pour tout ce retard.. j'a eu des problèmes avec ma grossesse + autres à gérer..
du coup, je reviens maintenant..j 'espère que tu vas bien et que c'est bon pour toi.

j'ai regroupé toute l'autre musique dans un seul dossier appelé _zik ordi_ qui comprend des titres et quelques dossiers… qui se trouve sur le dde . 
pas dans musique_ok car je n'ai pas de place dans l'ordi...

peux tu me remontrer la commande à faire pour les doublons?

ensuite, je pense que je vais effacer _zic jen_ du dde (qui équivaut au dossier _music_ ) et copier _musique_ok_ sur le dde..

puis je vais tout regrouper en un seul et même dossier * musique_ok*
et enfin, peut être  faire commande pour ranger les nouveaux titres ajoutés dans les dossiers respectifs ( nom de l artiste) que tu m 'avais crée dans _musique_ok_ au début..

qu 'en penses tu? 

écoute, tu vois ce que tu peux faire… si ça te demande trop de temps ou autre, je veux bien juste la commande des doublons et je te laisse tranquille..
prend le temps qu'il te faut,  bien évidemment.

bien à toi,


----------



## Membre supprimé 1129907 (26 Septembre 2020)

jane23 a dit:


> peux tu me remontrer la commande à faire pour les doublons?



Ceci ? C'était juste au dessus de ton poste   


ecatomb a dit:


> La commande cksum permet de savoir si 2 fichiers sont normalement identiques (elle ne tient pas compte du nom).
> Exemple :
> 
> ```
> ...



Pour tes autres requêtes, je n'ai pas trop compris ce que tu souhaites que je fasse. Désolé


----------



## jane23 (27 Septembre 2020)

Cher ecatomb, 
oui c'est pas très clair..  
alors aujourd'hui, voici ce que j'ai fait..
j'ai transféré tout le dossier _musique_ok_ sur mon disque dur.
j'ai tout effacé sur l'ordi ( musique_ok, music de i tunes…etc….). de toutes façons j'avais plus d 'espace mémoire sur l'ordi.
j'ai mis tous les sous dossiers * zic ordi* * musique guatemala* etc, etc dans _musique_ok_

donc, en gros, j'ai tout regroupé dans le dossier * musique_ok* sur le disque dur externe...

j'ai essayé de faire la commande bash pour les doublons mais ça répond: " command not found", donc rien ne sort...

c'est là que j'ai compris ce qui me conviendrait vraiment  ce qui me donne le sentiment d user et d abuser de tes compétences et de ta patience...

écoute, je tente le tout pour le tout..: )

pour avoir une vue d 'ensemble et faciliter au maximum ces 300 go de musique, j'aimerais qu'en faisant un simple clic sur * musique_ok*, l'arborescence soit: Artiste-album-01-titre
 comme ça je pourrai les classer par genre ensuite...

qu'en penses tu? ça serait plus clair,non?


----------



## Membre supprimé 1129907 (27 Septembre 2020)

Bizarre que la commande "cksum" ne soit pas reconnue. Peut-être une erreur dans ce que tu as copier ou alors je l'avais installé sur mon poste ? Le $ n'est pas à taper, c'est celui qui s'affiche dans le terminal.



jane23 a dit:


> pour avoir une vue d 'ensemble et faciliter au maximum ces 300 go de musique, j'aimerais qu'en faisant un simple clic sur * musique_ok*, l'arborescence soit: Artiste-album-01-titre


Donc à partir du nom, les classer dans des sous-dossiers ?
Peux-tu me donner 2-3 exemples de nom (en espérant qu'il n'y en a pas avec des tirets dans le nom d'artiste ou d'album) ?


----------



## jane23 (28 Septembre 2020)

pour _cksum_ ça me donne : `no such file or  directory` (j'ai fait sans le signe du dollar). Peut-être parce que c'est plus sur le Mac mais sur le dde ?




- et non, j'aimerais qu'il n'y ait plus de sous-dossiers... juste le dossier : musique_ok puis clic puis direct nom de l'artiste en premier et si ça suit, (album), (01), titre (si c'est un titre) ou album (si c'est un album)...




Che pas, j'te prends des exemples en capture d'écran. En gros, c'est le nom de l'artiste puis son titre :












Et je comprends qu'il faudra que je retire les tirets (oh purée y'en a partout !!) si je veux que ça fonctionne

Je t'envoie une capture d'écran pour te montrer en gros comment se rangent les titres sur le sous-dossier (par exemple) : zip ordi, avec ses doublons et ses tirets...




Également, je ne parviens pas à effacer des dossiers vides dans la corbeille.


----------



## Membre supprimé 1129907 (28 Septembre 2020)

jane23 a dit:


> pour _cksum_ ça me donne : `no such file or  directory` (j'ai fait sans le signe du dollar). Peut-être parce que c'est plus sur le Mac mais sur le dde ?


C'est bien ça, il ne trouve pas de fichiers à traiter.

dde = disque externe ? Si oui, ce sera une commande de ce style :

```
cksum /Volumes/"xxxx"/*
```
Le xxxx étant à remplacer par le nom du disque et le signe étoiles sans doute par le nom du/des répertoires contenant tes fichiers

Dans mon cas, c'est "Time Machine" pour le nom du disque :

```
ls -l /Volumes/
total 0
lrwxr-xr-x  1 root  wheel    1 28 sep 18:44 Macintosh HD -> /
drwxrwxr-x  5 root  wheel  476 28 sep 20:03 Time Machine
```



jane23 a dit:


> et non, j'aimerais qu'il n'y ait plus de sous-dossiers... juste le dossier : musique_ok puis clic puis direct nom de l'artiste en premier et si ça suit, (album), (01), titre (si c'est un titre) ou album (si c'est un album)...


Donc rajouter le nom des dossiers dans le nom des fichiers de musique ? Sinon, je ne vois pas comment rajouter dans le nom des fichiers une information qui n'existe nul par ailleurs.

Mais la question principale reste : où sont tes fichiers ? Dans un dossier correspondant à l'artiste, l'album, autre dossier ?

On déplace juste les fichiers en les renommant ?
La commande suivante (en remplaçant xxxx par le nom de ton dde) nous sortira la liste de tous les fichiers présent avec le nom des répertoires. Ce sera une bonne base pour travailler dessus.

```
find /Volumes/"xxxx" -type f > liste_fichier.txt
```



jane23 a dit:


> Et je comprends qu'il faudra que je retire les tirets (oh purée y'en a partout !!) si je veux que ça fonctionne


Ce ne sera pas gênant, au pire il est possible de les supprimer lorsqu'on renomme/déplace les fichiers. Mais je ne suis pas certain que cela soit nécessaire.



jane23 a dit:


> Également, je ne parviens pas à effacer des dossiers vides dans la corbeille.
> 
> Voir la pièce jointe 192793


Le vider la corbeille ne marche pas ?


----------



## jane23 (28 Septembre 2020)

alors, j'ai essayé la commande cksum avec nom du disque dur (minuscule ou majuscule) + nom du dossier… ça ne marche pas...
je t'envoie en copie la commande ainsi que le nom du dde (oui disque dur) et le nom du dossier à l'intérieur de celui ci (musique_ok)














Ensuite, oui la commande "vider" de la corbeille ne fonctionne pas pour ces dossiers. Par contre, la corbeille efface sans problème toutes les autres choses.

La réponse à la question principale que tu m'as posée est : mes fichiers sont dans _musique_ok_ sur le dde :
   - à l'intérieur de celui ci, se trouve :
                                                                 - tout le travail que tu m'as fait il y a 15 jours : (nom de l'artiste en dossier puis ses chansons à l'intérieur présentés en tant que fichier... voir capture d'écran




                                                                 - Dans musique_ok, j'ai ajouté à ton travail 2 nouveaux dossiers appelés : zic ordi et zic sofie où j'ai regroupé tous les autres titres qui n'étaient pas dans iTunes media, ou musique_ok  ou autres.. ce sont les fameuses copies de copies faites au fil du temps dont je t'avais parlé.





- à l'intérieur de ces 2 dossiers, il y a ou :
                                                                   - des simples fichiers (les chansons en formats pour majorité mp3, puis quelques mp4,  m4a, aiff, wma, wav)
                                                                   - des dossiers qui comprennent des fichiers.





donc, j'aimerais regrouper tous les fichiers (les titres) dans un seul dossier : musique_ok

ce qui donnerait par exemple :

-Dossier musique_ok :
     - Alain Bashung - Fantasie militaire
     - Alain Bashung - Malaxe
     - Bobby Hebb - Sunny
     - …… - …...

etc...
avec, si possible et si on a l'info,  le nom de l'album, et le numéro du titre de la chanson.

donc, si on se comprend bien, ça serait, comme tu le dis, juste déplacer tous les fichiers en les renommant au sein d'un seul et même dossier : le _musique_ok_


----------



## Membre supprimé 1129907 (29 Septembre 2020)

La commande cksum a bien fonctionné (avec le nom en majuscule). Elle n'a juste retourné le résultat que pour le répertoire et non son contenu.
Je pense avoir suffisamment d'info, je vais regarder ça en détail ce soir.


----------



## Membre supprimé 1129907 (30 Septembre 2020)

Ceci devrait fonctionner. Cela recherchera tous les fichiers présents dans ton dde dans le répertoire "Musique_ok".
Ensuite, il se sert des noms des dossiers pour le rajouter dans le nom du fichier. Il traitera tous les fichiers sauf les ".DS_Store"

Cas 1
"./artiste/album/fichier" deviendra "artiste - album - fichier"

Cas 2
"./dossier/fichier" deviendra "dossier - fichier"

Et à la fin, je t'ai fait une petite détection des fichiers qui semblent être des doublons.
Tu auras 3 fichiers txt créés avant le répertoire Musique_ok:

liste_musique.txt : la liste de tous les fichiers trouvés dans "Musique_ok" et qui seront donc renommés
liste_musique_doublon_1.txt : le résultat des cksum de ces fichiers (est fait après leur déplacement)
liste_musique_doublon_2.txt : les fichiers dont le cksum est identique


```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/liste_musique.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
cd "${source}"

find . -type f | grep -v ".DS_Store" | head 10 > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  cp "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"

#detection doublon
#936731427 13791 listemusique.txt
#936731427 13791 test.txt
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

La partie

```
find . -type f | grep -v ".DS_Store" | head 10 > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  cp "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"
```
est à remplacer par

```
find . -type f | grep -v ".DS_Store" > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  mv "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"
```
une fois que c'est lancé une première fois sans erreur et que tu as vérifié que le résultat te convient bien.
La version de base ne traitera que 10 fichiers et en fera une copie. Après la modification, cela traitera bien tous les fichiers et les déplacera (pas de copie)


----------



## jane23 (30 Septembre 2020)

voici le résultat de premier bloc de code...


----------



## Membre supprimé 1129907 (30 Septembre 2020)

Oups! C'est le nouveau code pour le "musique.sh"

Suis la procédure que j'avais mis ici pour le mettre à jour :




__





						Déplacer dossiers et sous-dossiers, mais pas les fichiers
					

bonjour,  merci pour les précisions. alors dans le finder (qui est donc je pense 'tous mes fichiers' )aucun des titres n apparait. ils apparaissent dans les dossiers correspondants oui.   captures decran du musique.log  capture d 'écran de toshiba  enfin, dans le terminal ça affiche avec le bon...




					forums.macg.co
				






ecatomb a dit:


> Remplace le contenu de l'ancien fichier "musique.sh" par le code ci-dessous
> 
> Ensuite, tu peux le lancer dans le terminal via la commande
> 
> ...


----------



## jane23 (30 Septembre 2020)

J'ai remplacé dans TextEdit le bloc de code donné ci-dessus, sous musique.sh, puis lancé dans le Terminal le
`find . -type f | grep -v ".DS_Store" | head 10 > "${liste_fic}"`




Qu'est-ce que je loupe ?


----------



## Membre supprimé 1129907 (30 Septembre 2020)

Ferme ce terminal et ouvre en un nouveau.  Comme ça on n'a plus l'ancien affichage qui gène et autre et tu seras normalement au bon endroit. Il te suffira alors de lancer le script via le 

```
./musique.sh
```


----------



## jane23 (1 Octobre 2020)

Ça ne marche pas...
Je ne comprends pas… J'ai essayé TextEdit avec musique.sh, j'ai recommencé sur liste musique_fichier.txt

J'ai essayé des trucs sur le Terminal…
Je t'envoie capture d'écran :


----------



## Membre supprimé 1129907 (1 Octobre 2020)

Le fichier musique.sh de ton répertoire utilisateur est bien modifié ?
Pour le lancer, n’oublie pas de taper son nom avec le point au tout début


----------



## jane23 (1 Octobre 2020)

Je crois que je m'y perds… je te prie de m'excuser

Sur TextEdit : j'ai le répertoire musique.sh où j'ai rentré le gros script envoyé y'a 2 jours. Puis sur le Terminal j'ai entré : le `find` ce qui n' a rien donné. J'ai entré le `./musique.sh` et ça me met : permission denied


----------



## Membre supprimé 1129907 (1 Octobre 2020)

musique.sh est un fichier, pas un répertoire

le find est dans le script


----------



## jane23 (1 Octobre 2020)

bon… et bien je ne sais pas...

j'ai bien modifié le fichier musique.sh de mon répertoire utilisateur . 
j'ai lancé dans le terminal ./musique.sh et ça me met permission denied..


----------



## Membre supprimé 1129907 (1 Octobre 2020)

On va reprendre un de mes anciens postes et le mettre à jour (de retour sur mon mac, c'est plus simple pour ça) 

Donc ouvre TextEdit, colle le code ci-dessous dedans et enregistre ça comme fichier nommé "musique.sh" dans ton répertoire de base (celui avec ton nom de user). _A priori seule cette partie est ok_

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/liste_musique.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
cd "${source}"

find . -type f | grep -v ".DS_Store" | head 10 > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  cp "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"

#detection doublon
#936731427 13791 listemusique.txt
#936731427 13791 test.txt
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

Ensuite, lance le Terminal. Il t'affichera le répertoire de ton user par défaut.
Passe alors la commande suivante pour rendre ce script exécutable.

```
chmod +x musique.sh
```

Il ne restera plus qu'à le lancer via la commande. Relance un terminal pour être au bon endroit

```
./musique.sh
```

Cette version de base ne traitera que 10 fichiers et en fera une copie dans le "musique_ok" sous les noms voulus.
Si c'est bon (répertoire cible et nom du fichier), on modifie une partie du musique.sh. La partie

```
find . -type f | grep -v ".DS_Store" | head 10 > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  cp "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"
```
sera à remplacer par

```
find . -type f | grep -v ".DS_Store" > "${liste_fic}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  mv "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"
```
Le "| head 10" disparait et le "cp" devient un "mv"

Après cette modification, cela traitera bien tous les fichiers et les déplacera (pas de copie). Pas besoin de supprimer les 10 fichiers déjà traités avant de relancer la commande.

```
./musique.sh
```

Bon, tu en auras avec "zic ordi" et "zic sofie" dans le nom mais c'est pas trop gênant. macOS sans très bien renommer en masse des fichiers pour enlever ou remplacer cette partie. C'est pour cela qu'elle n'est pas traité dans mon script.

Tu auras 3 fichiers txt créés avant le répertoire Musique_ok:

liste_musique.txt : la liste de tous les fichiers trouvés dans "Musique_ok" et qui seront donc renommés
liste_musique_doublon_1.txt : le résultat des cksum de ces fichiers (c'est fait après leur déplacement)
liste_musique_doublon_2.txt : les fichiers dont le cksum est identique


----------



## Membre supprimé 1129907 (1 Octobre 2020)

ecatomb a dit:


> Après cette modification, cela traitera bien tous les fichiers et les déplacera (pas de copie). Pas besoin de supprimer les 10 fichiers déjà traités avant de relancer la commande.
> 
> ```
> ./musique.sh
> ```


Oups! C'est après avoir modifier le script qu'il faudra relancer le terminal pour être au bon endroit. Donc avant cette partie


----------



## jane23 (1 Octobre 2020)

Hahaha !
C'est affreux… je ne sais pas ce qui plante…. ça me met : no such file or directory




Quand j'ouvre le Toshiba, à musique_ok… j'ai beau chercher les 10 fichiers test, rien ne s'est modifié...


----------



## Membre supprimé 1129907 (2 Octobre 2020)

Ok, il n'y a plus de problème pour lancer le script. Il faut maintenant trouver ce qui ne va pas quand il tourne.
Si tu ouvres le toshiba, vois-tu des fichiers liste_musique.txt, liste_musique_doublon_1.txt ou liste_musique_doublon_2.txt ?

Que donne la série de commande suivante si tu les passes dans le terminal ?

```
dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"

ls -l "/Volumes"
ls -ld "${dde}"
ls -ld "${source}"
cd "${source}"
```


----------



## jane23 (3 Octobre 2020)

oui , dans le toshiba, je vois les fichiers txt, doublon1 et doublon 2.
voici le résultat  avec la commande du terminal


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Et le liste_musique.txt n'est pas vide. Contient-il bien une liste de fichiers de musique ?


----------



## jane23 (3 Octobre 2020)

Il contient ça...


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Très bien, donc la source du problème semble être le find.

Si tu tapes ces deux commandes dans le terminal, quel est le résultat ?

```
cd "/Volumes/TOSHIBA/Musique_ok"
find . -type f | grep -v ".DS_Store" | head 10
```

S'il retourne bien une liste de fichier plus lisible, passe ensuite la suivante et regarde à nouveau le fichier liste_musique.txt

```
find . -type f | grep -v ".DS_Store" > ../liste_musique.txt
```


----------



## jane23 (3 Octobre 2020)

non, c'est pas plus lisible..: )


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Ah zut ! Si le disque est protégé, c'est peut-être ça la cause du problème...

Les deux commandes suivantes retournent-elles une liste de fichiers/dossiers plus lisible ?

```
ls -l /Volumes/TOSHIBA/Musique_ok/*/*
ls -l /Volumes/TOSHIBA/Musique_ok/*/*/*
```


----------



## jane23 (3 Octobre 2020)

Hehe!!! Ça semble fonctionner. C'est lisible. Y'a des titres et artiste de chansons qui apparaissent à la fois dans zic ordi, zic sofie et autres...

Je t'envoie 3 captures d'écran exemple :


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Cool, on va pouvoir utiliser cette commande ça à la place du find. Je vais voir quoi faire exactement et je reviens vers toi


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Donc voici le nouveau "musique.sh" :

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/liste_musique.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
cd "${source}"

ls */*.*       > "${liste_fic}"
ls */*/*.*     >> "${liste_fic}"
ls */*/*/*.*   >> "${liste_fic}"
ls */*/*/*/*.* >> "${liste_fic}"

head -10 "${liste_fic}" | while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  cp "${fichier_full}" "${fichier_new}"
done

#detection doublon
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

S'il a bien traité 10 fichiers, on va pouvoir traiter l'ensemble des fichiers listés dans le "liste_musique.txt" (via le précédent). Pour cela, tu le remplaces par :

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/liste_musique.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
cd "${source}"

while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#^\./##" | sed "s#/# - #g")
  mv "${fichier_full}" "${fichier_new}"
done <  "${liste_fic}"

#detection doublon
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (3 Octobre 2020)

Alors, musique.sh modifié.
Dans le terminal, voici ce que ça donne :




Dans le toshiba, musique.txt ça donne une liste de 200 de titres, je dirais.
Est-ce que ça te parait correct ?


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Vu que contrairement au find, il ne va pas chercher dans tous les sous-répertoires. C'est normal qu'il en trouve moins.
Le "argument list too long" montre aussi que la commande "ls" a ses limites. Le résultat est trop long pour pouvoir écrire la liste de tous ce qu'il a trouvé dans le "liste_musique.txt"
En prime, les autres erreurs semblent indiquées que les caractères spéciaux dans les noms des fichiers posent problème (ça doit être pour ça qu'il ne trouve pas le fichier).

Automator va peut-être nous permettre de faire l'action du "find" correctement. Crée un nouveau workflow avec ces 3 séries d'actions :

Ajoute le dossier "musique_ok" de ton disque
Coche le "répéter pour chaque sous-dossier" dans la deuxième partie
Pour le "créer un fichier texte", peu importe. Ce sera un fichier qu'on va vérifier et s'il est bon, on le mettra à la place du "liste_musique.txt"


----------



## jane23 (3 Octobre 2020)

ok, le workflow est crée.
j enregistre et exécute ou j'appuie sur étape?


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Juste sur "executer"


----------



## jane23 (3 Octobre 2020)

ca y est. c'est fait


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Très bien, quel est la tête du contenu du fichier créé ?


----------



## jane23 (3 Octobre 2020)

ou est ce que je le trouve?


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Le "créer un fichier texte" le crée sur le bureau par défaut. A moins que tu aies indiqué un autre endroit


----------



## jane23 (3 Octobre 2020)

je ne parviens pas à te transmettre le doc..le format n 'est pas accepté en envoi.

  je t 'envoie une capture d'écran de la _tête_ du doc


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Ca m'a l'air bien   

Copie ce fichier sur le dde là où était le "liste_musique.txt" (tu peux le laisser sous le nom "SansTitre.txt")

Remplace le contenu du "musique.sh" par ceci :

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

head -10 "${liste_fic}" | while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    cp "${fichier_full}" "${fichier_new}"
  fi
done

#detection doublon
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

Lance le via cette commande :

```
./musique.sh
```

Cette fois, on devrait avoir des fichiers (j'espère) et les liste_musique_doublon* ne devrait pas être vide.

Si c'est bon, on pourra lancer la version suivante du "musique.sh" qui déplacera la totalité des fichiers.

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    mv "${fichier_full}" "${fichier_new}"
  fi
done < "${liste_fic}"

#detection doublon
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (3 Octobre 2020)

je suis désolée..
ca marche pas…
réponse du terminal: no such file directory


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Lance cette version, elle sera un peu plus parlante, et poste le résultat (via un screenshot)


```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

head -10 "${liste_fic}" | while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  echo "source : ${fichier_full}"
  echo "cible : ${fichier_new}"
  if [ -f "${fichier_full}" ]
  then
    echo "commande cp"
    cp "${fichier_full}" "${fichier_new}"
  fi
done
```


----------



## jane23 (3 Octobre 2020)

oui


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Ok, donc la copie a, à priori, bien marchée. Mais les fichiers ne sont pas forcément copié au bon endroit   
Regarde là où se trouve le musique.sh, il y a peut-être ces fichiers de musique.

Teste cette version :

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

head -10 "${liste_fic}" | while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    echo "copie de ${fichier_new}"
    cp "${fichier_full}" "${source}/${fichier_new}"
  fi
done

#detection doublon
cksum "${source}/*.*" | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (3 Octobre 2020)

voici le résultat


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Et pas de fichier dans Musique_ok ?

Passe ces commandes dans le terminal pour en savoir plus :

```
touch /Volumes/TOSHIBA/Musique_ok/a_supprimer
ls -l /Volumes/TOSHIBA/Musique_ok
ls -ld /Volumes/TOSHIBA/Musique_ok
```


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Je crois que j'ai trouvé, une petite erreur dans la commande cksum

Version corrigée du script :

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

head -10 "${liste_fic}" | while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    echo "copie de ${fichier_new}"
    cp "${fichier_full}" "${source}/${fichier_new}"
  fi
done

#detection doublon
cksum "${source}"/*.* | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

Si cette fois c'est bon (au niveau des nom et tout) tu peux lancer la suivante

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    echo "copie de ${fichier_new}"
    mv "${fichier_full}" "${source}/${fichier_new}"
  fi
done < "${liste_fic}"

#detection doublon
cksum "${source}"/*.* | sort > "${liste_fic_sort1}"
cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (3 Octobre 2020)

alors,
j'ai trouvé les 4 fichiers dans le musique_ok.
capture d'écran de la premiere commande: ( ce n 'est que le debut)
	

		
			
		

		
	






2 eme capture d'écran des 4 fichiers trouvés dans le musique_ok
	

		
			
		

		
	





on est bon alors, je pense..

je vais donc passer la commande finale

j'en trouve + que 4 en fait.. j'en vois 9.. il doit bien y avoir le 10 âme quelque part.


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Le 10ème devait être un répertoire donc non copié


----------



## jane23 (3 Octobre 2020)

allez ok je me lance : )

ca y est, c'est parti  : )


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Il y aura peut-être un problème avec le cksum : trop de fichier à traiter ?

La version suivante n'aura pas ce genre de problème. Et si elle t'affiche qu'il manque un fichier, cela voudra dire qu'un fichier n'a pas été déplacé/renommé correctement.
Le fichier liste_musique_doublon_2.txt contiendra les doublons à vérifier. Par contre ça prendra peut être pas mal de temps pour faire ça.

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

#detection doublon
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    cksum "${source}/${fichier_new}"
  fi
done < "${liste_fic}" | sort > "${liste_fic_sort1}"

cut -d' ' -f 1,2 "${liste_fic_sort1}" | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (3 Octobre 2020)

alors ca m en fait une partie
ca s'est arrêté: cause: * argument list too long*

ah bah jai pas vu ton message..je le lis

bon j'ai modifié le script, relancer la commande dans le terminal qui ne fait rien pour l'instant


dans doublon2: pas de fichiers.. et le terminal ne se lance pas


----------



## Membre supprimé 1129907 (3 Octobre 2020)

Ok, donc ça a dû faire la première partie. Tu dois avoir pleins de fichiers dans le musique_ok avec les noms voulus

Là, le cksum est bien en cours. Mais tant qu’il n’est pas terminé il n’affichera rien dans le terminal et ne va pas mettre à jour ses fichiers. Cela risque de durer un bon moment : plus d’1h ?


----------



## jane23 (4 Octobre 2020)

oui, merci j'ai plein de fichiers dans le musique_ok

par contre, le terminal n 'a rien donné, ni autre.. enfin rien de nouveau depuis le message liste trop longue


----------



## Membre supprimé 1129907 (4 Octobre 2020)

Voici une nouvelle version, j'ai vu une erreur dans le cksum précédent mais qui n'expliquerait pas pourquoi il s'est arrêté... Au contraire, il aurait du se terminer plus rapidement...

Si des fichiers n'ont pas été déplacés ils seront traités (pas d'impact sur les autres). Donc ça permettra de faire une vérification au passage. Cette version affichera plus d'information à l'écran, donc tu verras si elle avance correctement ou pas.

Sinon, on peut passer directement à celle tout en bas (bien plus rapide mais moins précise)


```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

echo "Déplacement fichier..."
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    echo "copie de ${fichier_new}"
    mv "${fichier_full}" "${source}/${fichier_new}"
  fi
done < "${liste_fic}"
echo "fin déplacement"
sleep 10

#detection doublon cksum
echo "cksum fichier partie 1..."
> "${liste_fic_sort1}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${source}/${fichier_new}" ]
  then
    echo cksum "${fichier_new}"
    cksum "${source}/${fichier_new}" >> "${liste_fic_sort1}"
  fi
done < "${liste_fic}"

echo "cksum fichier partie 2..."
sort "${liste_fic_sort1}" | cut -d' ' -f 1,2 | uniq -d | while IFS= read -r fichier_cksum
do
  egrep "^${fichier_cksum} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```

Si c'est trop long : peu de fichiers traités via la partie du cksum après quelques minutes on va abandonner cette méthode.
Donc si après 2-3min cela ne t'a pas affiché beaucoup de nom de fichier à l'écran, appuie sur les touches "control" et "c" de ton clavier quand tu es sur le terminal avec le script continuant à tourner. Cela l'arrêtera.


Et on passera à une version qui se servira uniquement de la taille des fichiers pour essayer de trouver des doublons avec la version ci-dessous. Le fichier "liste_musique_doublon_2.txt" produit contiendra donc les fichiers ayant une taille identique. A toi de vérifier ensuite si ce sont les mêmes ou pas.

```
#!/bin/bash

dde="/Volumes/TOSHIBA"
source="${dde}/Musique_ok"
liste_fic="${dde}/SansTitre.txt"
liste_fic_sort1="${dde}/liste_musique_doublon_1.txt"
liste_fic_sort2="${dde}/liste_musique_doublon_2.txt"

if [ ! -d "${source}" ] ; then echo error ; exit 1 ; fi
if [ ! -f "${liste_fic}" ] ; then echo error ; exit 1 ; fi

cd "${source}"

echo "Déplacement fichier..."
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${fichier_full}" ]
  then
    echo "copie de ${fichier_new}"
    mv "${fichier_full}" "${source}/${fichier_new}"
  fi
done < "${liste_fic}"

#detection doublon taille
echo "Taille fichier..."
> "${liste_fic_sort1}"
while IFS= read -r fichier_full
do
  fichier_new=$(echo ${fichier_full} | sed "s#/Volumes/TOSHIBA/Musique_ok/##" | sed "s#/# - #g")
  if [ -f "${source}/${fichier_new}" ]
  then
    wc -c "${source}/${fichier_new}" | sed "s#^ *##" >> "${liste_fic_sort1}"
  fi
done < "${liste_fic}"

sort "${liste_fic_sort1}" | cut -d' ' -f 1 | uniq -d | while IFS= read -r fichier_taille
do
  egrep "^${fichier_taille} " "${liste_fic_sort1}"
  echo ""
done > "${liste_fic_sort2}"
```


----------



## jane23 (4 Octobre 2020)

ok, c'est parti.
le premiere version prenait trop de temps effectivement. je lance la 2eme version. elle ne semble pas être bien plus rapide..
je sors là, quand je reviens, jte dis


----------



## jane23 (4 Octobre 2020)

je t envoie la capture d'écran du terminal. ca n 'a pas donné grand chose, peut être une 30taine de ligne.

 sur la liste des doublons_2txt, ca semble effectivement être identique, donc super


----------



## Membre supprimé 1129907 (4 Octobre 2020)

Donc normalement, c'est terminé   

Il te reste à vérifier que les sous-dossiers ne contiennent bien plus rien avant de les supprimer. Et à modifier le nom de certains fichiers s'ils ne te conviennent pas.


----------



## jane23 (4 Octobre 2020)

daccord...
notre histoire s'arrête donc là? 
je te remercie pour tout.. je te suis si reconnaissante.

une dernière question: dois je supprimer les doublons à la main?


----------



## Membre supprimé 1129907 (4 Octobre 2020)

Oui, je te conseille aussi de vérifier en les écoutant que c'est vraiment des doublons.
Il pourrait s'agir de deux fichiers de musique différent ayant exactement la même taille sur le disque.


----------



## jane23 (4 Octobre 2020)

ok.. merci encore ecatomb..
je ne sais comment te remercier de tout ce temps accordé, donné, offert.
tu as été super. 
j'imagine qu'on t appelle Le professionnel  :  )
passe une bonne soirée. 
bye bye


----------

