La synchronisation entre Google Filestream, Google Drive et Synology CloudSync a tout gâché et il me reste des centaines de dossiers en double avec le nom du dossier suivi d'un "(1)" ou d'un "(2)", etc. jusqu'à "(1) (1) (1)".
Connaissez-vous un programme ou un script pouvant fusionner ces dossiers?
Exemple de structure de dossier de niveau supérieur:
1100 Beetledwarf - Happy ATE
1100 Beetledwarf - Happy ATE (1)
1100 Beetledwarf - Happy ATE (2)
1100 Beetledwarf - Happy ATE (3)
1100 Beetledwarf - Happy ATE (3) (1)
1100 Beetledwarf - Happy ATE (3) (1) (1)
1100 Beetledwarf - Happy ATE (4)
1100 Beetledwarf - Happy ATE (5)
1100 Beetledwarf - Happy ATE (6)
Comme les sous-dossiers ont parfois aussi le même problème, le programme ou le script doit pouvoir fusionner les dossiers qui suivent ce modèle de nommage pour tous les sous-dossiers, par exemple:
Exemple de dossiers de 2e niveau:
1100 Beetledwarf - Happy ATE (6) Analysis Analysis (1) Smirckle_HL Smirckle_HL (2) Pending Reports Photos & Logos
La meilleure solution me permettrait également de déplacer des fichiers au lieu de les copier car la copie de fichiers prend beaucoup de temps, mais le déplacement est presque instantané.
Liste des choses que j'ai déjà essayées, mais aucune d'entre elles ne peut traiter la structure de dossiers "name (1)" (que je peux dire jusqu'à présent), et toutes copient des fichiers au lieu de les déplacer:
- WinMerge pour Windows 10 & lt; - étrangle lorsque vous essayez de copier des fichiers de disque Google (renvoie quelque chose du type "Commande DOS non prise en charge"
- Fusion pour MacOS. & lt; - lent.
- Terminal avec commande "idem" sous OS X & lt; - Meilleure option jusqu'à présent.
Merci de votre aide!
Réponses:
C'est l'approche que j'essayerais sous Linux. Je n'ai aucune expérience de Google Filestream, de Google Drive ni de Synology CloudSync, je ne peux donc pas dire si la solution peut être appliquée. J'espère néanmoins que cela vous donnera au moins quelques idées.
Hypothèses
mv
,cp
et d'autres outils sains peuvent travailler avec des répertoires comme s'ils étaient locaux;(N)
les chaînes sont en fait des instances du même fichier (répertoire);Procédure
Veuillez lire toute la réponse avant de tenter quoi que ce soit.
Je pense que certaines étapes pourraient être écrites sous forme de script, mais puisque la solution est très expérimental , mieux vaut le faire à la main, étape par étape, en faisant attention à ce qui se passe.
Dans une coquille
cd
au point de montage et invoquerfind . | vidir -
; utilisez un éditeur de texte de votre choix, par exemplekate
, comme ça:Cela ouvrira l'éditeur avec une liste de tous les objets, chacun avec son propre numéro devant. Lorsque vous modifiez le contenu, enregistrez le fichier (temporaire) et fermez l'éditeur, toutes les modifications sont appliquées. En général, voici ce que vous pouvez faire:
N'enregistrez le fichier que si vous êtes certain que le nouveau contenu décrit l'arborescence de répertoires que vous souhaitez obtenir.
Copiez le contenu de l'éditeur dans un autre fichier. Le but est de travailler avec et de coller le résultat (et de le sauvegarder) uniquement lorsque vous êtes certain de bien faire les choses. Les étapes suivantes font référence au nouveau fichier, sauf indication contraire explicite.
Utilisation
sed
ou tout autre outil pour se débarrasser de tout(N)
cordes (notez l'espace de début). A ce stade, vous devriez avoir des chemins "propres", beaucoup d’entre eux se produiront plus d’une fois (avec des nombres différents donnés parvidir
).Utilisation
sort -k 2
trier selon ces chemins. Grâce à-s
l'ancienAnalysis
devrait toujours précéder l'ancienAnalysis (1)
.Utilisation
uniq -f 1
déposer les chemins dupliqués. Maintenant, tout chemin devrait se produire une fois.Revérifiez la santé de la structure de répertoire encodée dans le résultat.
Collez le résultat dans l'éditeur d'origine, enregistrez le fichier et quittez l'éditeur.
vidir
supprimera les objets associés aux nombres manquants et déplacera les objets associés aux nombres laissés.Essai
Je voudrais d'abord utiliser cette solution pour répliquer la structure de répertoire:
et testez la procédure sur les fichiers vides résultants. Cela devrait révéler des problèmes (le cas échéant) et permettre, espérons-le, d'améliorer la méthode.
Problèmes possibles
vidir
refuse de travailler avec des caractères non standard.En général, l'ordre des objets est important. Il y a peu de pièges qui génèrent des objets comme
foo~
oufoo~1
,foo~2
quand il y a une collision avecfoo
. Vous allez "contracter" votre arborescence de répertoires de manière à ne générer aucune collision, mais je n'ai pas encore étudié tous les scénarios possibles. Je pense vraiment que vous devriez expérimenter/guinea_pig_dir/
et voyez ce que vous obtenez. En cas de soucis peut être un habilesort
entrefind
etvidir
aidera.la source
Vous trouverez ci-dessous un script bash qui effectue cette tâche. Cela fonctionne par exemple MSYS2 Bash avec rsync ajouté. Il est tiré de cette question connexe ici:
Script de déduplication de fichiers et de dossiers avec un suffixe particulier
la source
cd
Là.)