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

alors,
j'ai trouvé les 4 fichiers dans le musique_ok.
capture d'écran de la premiere commande: ( ce n 'est que le debut)Capture d’écran 2020-10-03 à 15.19.47.png
2 eme capture d'écran des 4 fichiers trouvés dans le musique_okCapture d’écran 2020-10-03 à 15.20.48.png
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.
 
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.
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}"

#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}"
 
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
 

Fichiers joints

  • Capture d’écran 2020-10-03 à 16.21.41.png
    Capture d’écran 2020-10-03 à 16.21.41.png
    11,8 KB · Affichages: 201
Dernière édition:
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 ?
 
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
 
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)

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}"

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.
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}"

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}"
 
  • J’aime
Réactions: litobar71
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
 
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
 

Fichiers joints

  • Capture d’écran 2020-10-04 à 12.44.57.png
    Capture d’écran 2020-10-04 à 12.44.57.png
    81,9 KB · Affichages: 205
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.
 
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?
 
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.