Avatar billede xplainit_dk Novice
13. oktober 2019 - 11:11 Der er 6 kommentarer og
1 løsning

Find alle filer med unik MD5 og kopier til ny mappe

Jeg har alle værktøjerne foran mig, men kan simpelthen ikke formå at sætte dem sammen til en helhed for at opnå det ønskede resultat..
Hvis nogen er skarp til kommandolinie og regexp, vil jeg være taknemmelig for lidt hjælp i den rigtige retning..

Jeg har indtil videre flg. output i terminalen (til en tekstfil)

MD5 (./Pictures/2013-08-31-19-15-53-1.jpg) = 1ce9e9c67e2f6f300c554ffbe18592b2
MD5 (./Pictures/2013-08-31-19-16-27-1.jpg) = 7d10f65f3b91a06abc9a22c2a9f5f237
MD5 (./Pictures/2013-08-31-19-16-59-1.jpg) = 63bebd4b2438130654180f91cb2ac039

Dette ud fra en simpel søgning på filstørrelse og filtype med output til en TXT fil.

Der kommer til at være mange hundrede tusinde filer, så jeg skal kunne finde alle ikke-dublerede MD5 værdier og kopiere kildefilen til ny destination. Bonus kunne være at ved kopiering bruge exiftool til at finde filens exif dato og sortere efterfølgende.
Avatar billede jakobdo Ekspert
13. oktober 2019 - 17:34 #1
Hvis du er ude i noget "programmering", så ville jeg jo "bare" mene det er et spørgsmål om at have en liste...


md5hash = get_md5_from_file(FILE)
if md5hash not in LISTE_OVER_MD5:
  // Kopier filen og indsæt i listen.
else:
  // Filen er allerede kopieret, skip
Avatar billede Spotgun Seniormester
13. oktober 2019 - 17:50 #2
Nu skriver du ikke noget om hvilket programmeringssprog du vil løse opgaven i. Det er dog rimeligt hurtigt klaret i PowerShell:

Get-ChildItem -Path "<source>" -Filter "*.jpg" -Recurse | Get-FileHash | Sort-Object Hash -Unique | Select-Object -ExpandProperty Path | Copy-Item -Destination "<destination>"
Avatar billede xplainit_dk Novice
14. oktober 2019 - 10:06 #3
Ok, burde have skrevet at det er i os x terminal, så shell kommandoer...  Jakobdo har godtnok en simpel og fin algoritme.
Spotgun - ser også rigtig fint ud, desværre har jeg ikke adgang til powershell.
Avatar billede jakobdo Ekspert
14. oktober 2019 - 10:56 #4
Hvad bruger du i OS X ?
Python eller noget shell commands ?
Avatar billede xplainit_dk Novice
22. oktober 2019 - 17:19 #5
Jakobdo - Shell commands.

Jeg tror at projektet kommer til at munde ud i noget a la flg.:

Programmet skal have en liste over SHA1 eller MD5 nøgler på samtlige filer som kopieres til et bestemt sted (mappe)

For hver kopi kommando som udføres af programmet, undersøges der om filen i forvejen findes i nøglesamlingen. Hvis ja, kopieres filen samt via exiftool bliver ordnet i mappe efter år/måned/dag
Avatar billede xplainit_dk Novice
25. oktober 2019 - 21:35 #6
Jeg tror ikke at jeg får mere hjælp til mit ødelagte billedbibliotek, men det forslag som Jakobdo kom med er det bedste jeg har set endnu, så jeg markerer hans løsning som min valgte løsning.
Avatar billede xplainit_dk Novice
25. oktober 2019 - 21:48 #7
md5hash = get_md5_from_file(FILE)
if md5hash not in LISTE_OVER_MD5:
  // Kopier filen og indsæt i listen.
else:
  // Filen er allerede kopieret, skip

Tak. Hvor kan jeg finde lidt mere om hvordan denne spændende sammensætning programmeres i shell commands / evt. shell script..
Hvad jeg har lige nu er flg:



#!/bin/bash

echo usage: run script on folder that contains images: Will copy to big drive @$
echo
echo

echo "Where to copy from ? $1" <---- input path for pictures

    if jpg | tiff | arw | nef ....
    2.1 check if SHA256 is in file xxxxxxx.txt
    2.1.1 If not, copy file (exiftool, sort by date in folders) and write hash to file.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester