Ratkaistu Tiedostojen vertaaminen kahden eri kohteen välillä joissa erilainen kansiorakenne

Liittynyt
17.02.2018
Viestejä
435
Minulla on puhelimen muistikortti jonka yhdessä kansiossa on satoja kuvia, joista en ole varma olenko siirtänyt kaikki tietokoneelle. Tietokoneen kuvakansiossa taas on useita alikansioita, joihin olen ryhmitellyt kuvia kronologisesti järkeviin kokonaisuuksiin. On hyvin hidasta käyttää Windowsin hakutoimintoa tarkistaakseen löytyykö tiedostonimellä 'match', kun kyseessä on satoja kuvia.
Kokeilin myös useita tiedostonvertaus ja -yhdistyssoftaa, kuten WinMerge ja WinDiff jne, mutta niissä ongelmana on että (ilmeisesti?) kansiorakenne pitää olla samanlainen molemmin puolin vertailua. Eli jos minulla on tiedosto 123.jpg kansiossa E:\DCIM\Camera ja toisaalta kansiossa D:\Kuvat\Joulu 2009\ , ei 'mätchiä' löydy koska kansiorakenne ei ole sama.
Kokeilin myös ohjelmia jotka löytävät duplikaattikuvia. Ne ajavat asiansa, eli löytävät kyllä duplikaatit vaikka kansiorakenne on erilainen, mutta kun tässä on ongelmana löytää ne kuvat, joita ei vielä ole siirretty kiintolevylle, niin niistäkään ei ole apua.

Ideoita?
 
Liittynyt
27.12.2016
Viestejä
785
Kun tiedostoja on vain satoja, niin varmaan listauksen voi kerran läpi lukea. Jos vertailua on usein, niin sitten on edelleenkehitettävää.
2-rivisellä Bashauksella:
Bash:
for i in "/polku1/hakem1" "/polku2/hakem2" ; do find "$i" -type f -name "*" | while read pname ; do echo "$(sha256sum "$pname") $i" ; done >>kaikkitiedostot.txt ; done
sort <kaikkitiedostot.txt | uniq -w64 --group | cut --delimiter=" " --fields=1 --complement >ryhmitellyttiedostot.txt
 
Liittynyt
17.02.2018
Viestejä
435
Kun tiedostoja on vain satoja, niin varmaan listauksen voi kerran läpi lukea. Jos vertailua on usein, niin sitten on edelleenkehitettävää.
2-rivisellä Bashauksella:
Bash:
for i in "/polku1/hakem1" "/polku2/hakem2" ; do find "$i" -type f -name "*" | while read pname ; do echo "$(sha256sum "$pname") $i" ; done >>kaikkitiedostot.txt ; done
sort <kaikkitiedostot.txt | uniq -w64 --group | cut --delimiter=" " --fields=1 --complement >ryhmitellyttiedostot.txt
:thumbsup: Joo, tiedostomäärä ei ole mikään mahdoton ja tämä on kerran tai korkeintaan harvoin toistuva ongelma, joten varmasti listaus riittä. Seuraavaksi tarvitsenkin neuvoa, kuinka ajan tuon Bashin normi Win 10 ympäristössä?

E: jos joku tietää natiivi Windows softan tms. jolla tämä sama onnistuu, niin saa ilmiantaa. Olisi helpompi itselle, kun ei Unix-hommat ole kovin tuttuja.
 
Viimeksi muokattu:
Liittynyt
17.01.2018
Viestejä
2 081
Onnistuu myös powershellillä.
WSL on ihan toimiva, ei tällaisia varten kannata boottailla muualle eikä asentaa cygwiniä.

Valmista softaa jolle voisi antaa vain hakemistoja ja painaa "tarkasta"- nappia ei ehkä ole olemassa, skriptaamalla selviää todennäköisesti parhaiten.

Jos haluat verrata vain nimiä niin voisi olla kätevää ottaa sekä puhelimesta että järjestetystä omat listat.
Sen jälkeen käyt puhelinlistan läpi rivi kerrallaan, otat polun sijaan pelkän tiedoston nimen ja haet sitä toisesta listasta.
Jos ei löydy niin tulostat polun ja nimen tulostiedostoon.
Ei siis välttämättä tarvita hashia kuten tuossa bash- esimerkissä.
 
Liittynyt
16.10.2016
Viestejä
726
 

neko

ᓚᘏᗢ
Liittynyt
18.10.2016
Viestejä
3 751
CloneSpy. Tällä on pärjätty kohta 20 vuotta. Vaatii hieman tutustumista, mutta toisaalta taipuu monella tavalla käytettäväksi, käyttäjästä riippuen.
 
Liittynyt
17.02.2018
Viestejä
435
CloneSpy. Tällä on pärjätty kohta 20 vuotta. Vaatii hieman tutustumista, mutta toisaalta taipuu monella tavalla käytettäväksi, käyttäjästä riippuen.
Luitteko kysymyksen kunnolla? Kyllähän noilla, kuten lukemattomilla muillakin softilla duplikaatit löytyy, mutta nyt pitäisi löytää eroavaisuudet. Vai millaiset asetukset pitää laittaa, että se onnistuu noilla?
 
Liittynyt
16.10.2016
Viestejä
726
Siirrä kaikki ja aja duplikaattitarkistus sen jälkeen :D
 
Liittynyt
17.02.2018
Viestejä
435
Siirrä kaikki ja aja duplikaattitarkistus sen jälkeen :D
Edelleen, asia ei ole niin yksinkertainen. Kohteessa on eri kansiorakenne kuin lähteessä. Lähteessä kaikki tiedostot samassa kansiossa, kun kohteessa ne on ryhmitelty eri alikansioihin. Eli tuota tyyliä ei voi soveltaa. Ja duplikaatit ei tässä ole se olennainen juttu.
 
Liittynyt
17.02.2018
Viestejä
435
Jollain live-linux -distrolla hoituu asentamatta mitään, jos on tekemässä tuota vain kerran.

Jos tarvetta on useammin, niin sitten tarvitsee asentaa jotakin. Aiemmin Cygwin tai vastaava, nykyään kai WSL:
Install Windows Subsystem for Linux (WSL) on Windows 10
Onnistuu myös powershellillä.
WSL on ihan toimiva, ei tällaisia varten kannata boottailla muualle eikä asentaa cygwiniä.

Valmista softaa jolle voisi antaa vain hakemistoja ja painaa "tarkasta"- nappia ei ehkä ole olemassa, skriptaamalla selviää todennäköisesti parhaiten.

Jos haluat verrata vain nimiä niin voisi olla kätevää ottaa sekä puhelimesta että järjestetystä omat listat.
Sen jälkeen käyt puhelinlistan läpi rivi kerrallaan, otat polun sijaan pelkän tiedoston nimen ja haet sitä toisesta listasta.
Jos ei löydy niin tulostat polun ja nimen tulostiedostoon.
Ei siis välttämättä tarvita hashia kuten tuossa bash- esimerkissä.
Tätä voisin lähteä koittamaan. WSL 2 on otettu käyttöön. Miten PowerShellissä käytetään Bashia, vai pitääkö skriptit kääntää Powershell-"muotoon"? Ajatuksella että käyttäisin esim. tuota @Tepe Bash-koodinpätkää.
 

neko

ᓚᘏᗢ
Liittynyt
18.10.2016
Viestejä
3 751
Luitteko kysymyksen kunnolla? Kyllähän noilla, kuten lukemattomilla muillakin softilla duplikaatit löytyy, mutta nyt pitäisi löytää eroavaisuudet. Vai millaiset asetukset pitää laittaa, että se onnistuu noilla?
Itse luin näemmä huonosti, pahoittelut.
 
Liittynyt
17.01.2018
Viestejä
2 081
Tätä voisin lähteä koittamaan. WSL 2 on otettu käyttöön. Miten PowerShellissä käytetään Bashia, vai pitääkö skriptit kääntää Powershell-"muotoon"? Ajatuksella että käyttäisin esim. tuota @Tepe Bash-koodinpätkää.
Wsllällä voi ajaa bash- skriptejä.
Powershell vaatii tietysti skriptin käännön, ei se osaa bashia.
 
Liittynyt
17.02.2018
Viestejä
435
Kun tiedostoja on vain satoja, niin varmaan listauksen voi kerran läpi lukea. Jos vertailua on usein, niin sitten on edelleenkehitettävää.
2-rivisellä Bashauksella:
Bash:
for i in "/polku1/hakem1" "/polku2/hakem2" ; do find "$i" -type f -name "*" | while read pname ; do echo "$(sha256sum "$pname") $i" ; done >>kaikkitiedostot.txt ; done
sort <kaikkitiedostot.txt | uniq -w64 --group | cut --delimiter=" " --fields=1 --complement >ryhmitellyttiedostot.txt
Tähän vihdoin palatakseni.
Asensin WSL:n ja Debianin. Ekan rivin ajo Debianin komentorivillä
Bash:
for i in "F:\DCIM\Camera\" "E:\Kayttaja\Kuvat\" ; do find "$i" -type f -name "*" | while read pname ; do echo "$(sha256sum "$pname") $i" ; done >>kaikkitiedostot.txt ; done
antaa tulokseksi:
Koodi:
find: ‘F:\\DCIM\\Camera" E:KayttajaKuvat"’: No such file or directory
Miten syötän tiedostosijainnit WSL Debianin ymmärtämässä muodossa?
Ja kun tästä päästään yli, niin mihin nuo kaikkitiedostot.txt ja ryhmitellyttiedostot.txt tulevat luoduksi Windowsin puolella?
 
Liittynyt
22.10.2016
Viestejä
7 108
Johtuu vähän mihin kohtaan tiedostorakennetta nuo windowsin "levykirjaimet" asettuu. tuo /mnt on se klassinen vakiopaikka, mutta ei niitä sinne rajoitettu ole.

Sinänsä mun mielestäni ihan "dos-bat":kin olisi taipunut tuohon, joita se windowsin komentokehota ajaa ihan hyvin.. enää en kyllä muista miten se olisi pitänyt muotoilla, mutta tuo for in do toimii sielläkin.
 
Liittynyt
27.12.2016
Viestejä
785
Miten syötän tiedostosijainnit WSL Debianin ymmärtämässä muodossa?
Ja kun tästä päästään yli, niin mihin nuo kaikkitiedostot.txt ja ryhmitellyttiedostot.txt tulevat luoduksi Windowsin puolella?
'df'-komennolla näkee, mitä levyjä/tiedostojärjestelmiä on liitetty ja minne.
Kun noissa tiedostonimissä ei ole polkua, niin tiedostot tulevat nykyiseen hakemistoon. Polku näkyy yleensä komentokehotteessa. Jos ollaan käyttäjän kotihakemistossa niin sitten näkyy pelkkä aaltoviiva. 'cd'-komennolla voi siirtyä.

Jos tuon ensimmäisen komennon ajaa useampaan kertaan, niin sen tuottama tiedosto täytyy poistaa välillä, ettei se kasva joka kierroksella.
 
Liittynyt
17.10.2016
Viestejä
22 055
'df'-komennolla näkee, mitä levyjä/tiedostojärjestelmiä on liitetty ja minne.
Kun noissa tiedostonimissä ei ole polkua, niin tiedostot tulevat nykyiseen hakemistoon. Polku näkyy yleensä komentokehotteessa. Jos ollaan käyttäjän kotihakemistossa niin sitten näkyy pelkkä aaltoviiva. 'cd'-komennolla voi siirtyä.

Jos tuon ensimmäisen komennon ajaa useampaan kertaan, niin sen tuottama tiedosto täytyy poistaa välillä, ettei se kasva joka kierroksella.
Kannattaa kirjoittaa:

df -h

Tuo h on human readable, suosittelen.
 
Liittynyt
17.02.2018
Viestejä
435
Jees, kiitos neuvoista tähän asti. Ulkoista levyä (muistikortti) ei ollut valmiiksi mountattu debianiin, niin näin helpoimmaksi siirtää muistikortin sisältö väliaikaisesti kovalevylle Kuvat USB -nimiseen kansioon, samaan polkuun tietokoneen kuvien kanssa. Toimiva skripti oli sen jälkeen
Bash:
for i in "/mnt/e/Kayttaja/Kuvat USB/" "/mnt/e/Kayttaja/Kuvat/" ; do find "$i" -type f -name "*" | while read pname ; do echo "$(sha256sum "$pname") $i" ; done >>kaikkitiedostot.txt ; done
Toka rivi
Bash:
sort <kaikkitiedostot.txt | uniq -w64 --group | cut --delimiter=" " --fields=1 --complement >ryhmitellyttiedostot.txt
antaa kuitenkin listauksen kaikista tiedostoista, jossa sitten ne tiedostot, jotka löytyvät molemmista sijainneista, on allekkaisilla riveillä (kun muuten on yksi tyhjä rivi välissä ennen seuraavaa tarkastelevaa tiedostoa). Miten saan kehitettyä skriptiä niin, että listauksessa on vain Kuvat USB -kansiossa olevat uniikit tiedostot?

Ai niin, ja jos siitä on jollekin hyötyä, niin windowsin resurssienhallinnassa Debianin tiedostot löytyvät polusta \\wsl$\Debian (ja sieltä edelleen myös nyt tarkastelussa oleva /mnt/)
 
Liittynyt
29.10.2016
Viestejä
449
Näemmä sait ratkaistua. Mutta laitan varoiksi softan millä pari viikkoa sitten sain 25 gigaa lisätilaa kun poistin duplikaatit. Windows 10, Microsoft Storesta Duplicate Cleaner Free. Laskee hashit tiedostoista ja listaa ne lokaatioiden mukaan klooniensa kanssa ja valikosta saa valita millä kriteereillä poistaa. ~7000 tiedostoa tuli poistettua tuolla tavalla käden käänteessä valokuvista ja puhelimilla kuvautuista videoista.
 
Liittynyt
27.12.2016
Viestejä
785
Toka rivi
Bash:
sort <kaikkitiedostot.txt | uniq -w64 --group | cut --delimiter=" " --fields=1 --complement >ryhmitellyttiedostot.txt
antaa kuitenkin listauksen kaikista tiedostoista, jossa sitten ne tiedostot, jotka löytyvät molemmista sijainneista, on allekkaisilla riveillä (kun muuten on yksi tyhjä rivi välissä ennen seuraavaa tarkastelevaa tiedostoa). Miten saan kehitettyä skriptiä niin, että listauksessa on vain Kuvat USB -kansiossa olevat uniikit tiedostot?
Käytä unique-vipua ja vielä yksi lajittelu siihen perään:
Bash:
sort <kaikkitiedostot.txt | uniq -w64 --unique | cut --delimiter=" " --fields=1 --complement | sort >ryhmitellyttiedostot.txt
 

Timo 2

Premium-jäsen
Tukijäsen
Liittynyt
11.02.2018
Viestejä
12 075
Windows storesta Duplicate cleaner free.
Se käy kaikki valitut sijainnit läpi ja pystyt eri kriteereillä määrittämään tiedostot samoiksi ja lopiksi tarkistamaan ne tiedostot, ja valita poistettavat mm. Sijainnin mukaan.

16140099379051457908162561751234.jpg

16140100482522565744300833844118.jpg
 
Liittynyt
17.02.2018
Viestejä
435
Käytä unique-vipua ja vielä yksi lajittelu siihen perään:
Bash:
sort <kaikkitiedostot.txt | uniq -w64 --unique | cut --delimiter=" " --fields=1 --complement | sort >ryhmitellyttiedostot.txt
A vot, nyt onnistui. Kiitos! Tattista myös matkan varrella jeesanneet @ississ ja @bindi
Toimisikohan tuommoinen? Ainakin ominaisuuksissa sanotaan list non-duplicate files.
Jees, testasin ja itse asiassa tälläkin onnistuu homma ihan Windows ympäristössä ja graafisessa käyttöliittymässä. Kiitos :)
Näemmä sait ratkaistua. Mutta laitan varoiksi softan millä pari viikkoa sitten sain 25 gigaa lisätilaa kun poistin duplikaatit. Windows 10, Microsoft Storesta Duplicate Cleaner Free. Laskee hashit tiedostoista ja listaa ne lokaatioiden mukaan klooniensa kanssa ja valikosta saa valita millä kriteereillä poistaa. ~7000 tiedostoa tuli poistettua tuolla tavalla käden käänteessä valokuvista ja puhelimilla kuvautuista videoista.
Windows storesta Duplicate cleaner free.
Se käy kaikki valitut sijainnit läpi ja pystyt eri kriteereillä määrittämään tiedostot samoiksi ja lopiksi tarkistamaan ne tiedostot, ja valita poistettavat mm. Sijainnin mukaan.
Nämä menevät samaan kategoriaan kuin monet aiemmat ehdotukset, eli ne eivät etsi puuttuvia tiedostoja vaan duplikaattitiedostoja. Lukemalla ongelmakuvaus tarkemmin olisi näiltäkin ehdotuksilta ehkä säästytty...
 
Toggle Sidebar

Statistiikka

Viestiketjut
239 685
Viestejä
4 188 820
Jäsenet
70 780
Uusin jäsen
Tauno.T

Hinta.fi

Ylös Bottom