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

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 :

Capture d’écran 2020-10-03 à 09.07.45.png Capture d’écran 2020-10-03 à 09.07.25.png Capture d’écran 2020-10-03 à 09.06.20.png
 
Dernière édition par un modérateur:
Cool, on va pouvoir utiliser cette commande ça à la place du find. Je vais voir quoi faire exactement et je reviens vers toi
 
Donc voici le nouveau "musique.sh" :
Bloc de code:
#!/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 :
Bloc de code:
#!/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}"
 
Alors, musique.sh modifié.
Dans le terminal, voici ce que ça donne :

Capture d’écran 2020-10-03 à 11.26.14.png

Dans le toshiba, musique.txt ça donne une liste de 200 de titres, je dirais.
Est-ce que ça te parait correct ?
 
Dernière édition par un modérateur:
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 :
  1. Ajoute le dossier "musique_ok" de ton disque
  2. Coche le "répéter pour chaque sous-dossier" dans la deuxième partie
  3. 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"
Capture d’écran 2020-10-03 à 17.43.40.png
 
Le "créer un fichier texte" le crée sur le bureau par défaut. A moins que tu aies indiqué un autre endroit
 
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
 

Fichiers joints

  • Capture d’écran 2020-10-03 à 14.10.12.png
    Capture d’écran 2020-10-03 à 14.10.12.png
    84 KB · Affichages: 233
Ca m'a l'air bien :up:

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 :
Bloc de code:
#!/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 :
Bloc de code:
./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.
Bloc de code:
#!/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}"
 
je suis désolée..
ca marche pas…
réponse du terminal: no such file directory
 

Fichiers joints

  • Capture d’écran 2020-10-03 à 14.38.00.png
    Capture d’écran 2020-10-03 à 14.38.00.png
    284,8 KB · Affichages: 249
Lance cette version, elle sera un peu plus parlante, et poste le résultat (via un screenshot)

Bloc de code:
#!/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
 
oui
 

Fichiers joints

  • Capture d’écran 2020-10-03 à 14.45.03.png
    Capture d’écran 2020-10-03 à 14.45.03.png
    36 KB · Affichages: 236
  • Capture d’écran 2020-10-03 à 14.44.47.png
    Capture d’écran 2020-10-03 à 14.44.47.png
    65 KB · Affichages: 235
Ok, donc la copie a, à priori, bien marchée. Mais les fichiers ne sont pas forcément copié au bon endroit :siffle:
Regarde là où se trouve le musique.sh, il y a peut-être ces fichiers de musique.

Teste cette version :
Bloc de code:
#!/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}"
 
Et pas de fichier dans Musique_ok ?

Passe ces commandes dans le terminal pour en savoir plus :
Bloc de code:
touch /Volumes/TOSHIBA/Musique_ok/a_supprimer
ls -l /Volumes/TOSHIBA/Musique_ok
ls -ld /Volumes/TOSHIBA/Musique_ok
 
Je crois que j'ai trouvé, une petite erreur dans la commande cksum

Version corrigée du script :
Bloc de code:
#!/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
Bloc de code:
#!/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}"
 
Dernière édition par un modérateur: