Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: BIJNA OPGELOST Zoeken naar dubbele bestanden met find en awk  (gelezen 2902 keer)

Offline BaukeP

  • Lid
BIJNA OPGELOST Zoeken naar dubbele bestanden met find en awk
« Gepost op: 2010/09/09, 00:33:39 »
Hallo,

Ik ben bezig mijn foto's op te schonen en in plaats van er een programma voor te zoeken wil ik dat met een script doen.

Ik heb dit al:
Alle foto's en gesorteerd opgeslagen in dubbel.txt:
find /mnt/Data/Foto -iname "*.jpg" -exec md5sum {} \; |sort > ~/dubbel.txt
en welke is dan dubbel?:
awk '{a[$1]++;} END {for (i in a) {if (a > 1) print i;} }' dubbel.txt > dubbel1.txt

Het probleem is nu, dat in dubbel1.txt alleen de md5-code komt te staan. Ik heb alle regels van een dubbele nodig.
Dus ik wil niet (wat ik nu krijg) alleen 42a0124ae3f1d5283986e361dfabaa9a
maar:
42a0124ae3f1d5283986e361dfabaa9a  /mnt/Data/Foto/IMG_4210.JPG
42a0124ae3f1d5283986e361dfabaa9a  /mnt/Data/Foto/IMG_4210 (kopie).JPG
en dat kunnen er ook meer dan twee zijn.

met uniq -d lukt het niet omdat niet de hele regel gelijk hoeft te zijn.

Iemand een oplossing?

Alvast bedankt

Bauke
« Laatst bewerkt op: 2010/09/14, 19:43:41 door BaukeP »

Offline BaukeP

  • Lid
Re: De laatste stap; awk probleempje
« Reactie #1 Gepost op: 2010/09/09, 00:59:57 »
Zelf gevonden! (begin het te leren................. geloof ik)

awk 'BEGIN{while ((getline < "dubbel1.txt") > 0) dubbele[$1] = 1} \
dubbele[$1] {print}' dubbel.txt > dubbel2.txt

Nog even in een scriptje zetten en ik heb alle dubbele!

Als het nog korter en beter kan, dan graag de manier waarop!

Bauke

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: De laatste stap; awk probleempje
« Reactie #2 Gepost op: 2010/09/10, 12:12:45 »
Hey BaukeP, mooi dat je het zelf al op hebt kunnen lossen. Zelf zoek ik ook zoiets. Zou je het hele scriptje zoals het nu werkt hier nog eens kunnen posten? Het liefst even tussen [ code] [ /code] zetten.
BvD
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: De laatste stap; awk probleempje
« Reactie #3 Gepost op: 2010/09/13, 19:35:11 »
Zeker!

#!/bin/bash

find '/mnt/Data/Foto' -iname "*.jpg" -exec md5sum {} \; |sort > ~/dubbel.txt
mawk '{a[$1]++;} END {for (i in a) {if (a[i] > 1) print i;} }' dubbel.txt > /tmp/dubbel1
mawk 'BEGIN{while ((getline < "/tmp/dubbel1") > 0) dubbele[$1] = 1} dubbele[$1] {print}' dubbel.txt > dubfoto_res.txt

Stelt eigenlijk niks voor als je het zo ziet. In Windows bouwen ze hier complet pakketten voor  :P

Bauke

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: De laatste stap; awk probleempje
« Reactie #4 Gepost op: 2010/09/13, 22:34:14 »
Hey, fijn dat je het deelt. Zelf heb ik het iets uitgebreid en algemeen voor bestanden gemaakt. Dus niet alleen voor foto's. Zie hier mijn huidige scriptje:

#!/bin/bash
# version: 20100913

if [ "$1" == "" ]; then
echo -e "Usage: find-duplicate-files [PATH], default path is current dir";
P=.;
else
P=$1;
fi

DATETIME=$(date '+%Y%m%d-%H%M%S')

TMPFILE=/tmp/md5sums-files-$DATETIME
SUMS_DOUBLE=/tmp/md5sums-$DATETIME
DOUBLE_FILES=/tmp/double-files-$DATETIME.txt

echo "searching for duplicate files in '$P'";

find $P -mindepth 1 -type f -exec md5sum {} \; | sort > $TMPFILE
mawk '{a[$1]++;} END {for (i in a) {if (a[i] > 1) print i;} }' $TMPFILE > $SUMS_DOUBLE
mawk 'BEGIN{while ((getline < "'$SUMS_DOUBLE'") > 0) dubbele[$1] = 1} dubbele[$1] {print}' $TMPFILE > $DOUBLE_FILES

echo "Double files stored in $DOUBLE_FILES";

Als iemand opmerkingen, verbeteringen, ideeën of vragen heeft hoor ik het graag :)
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: De laatste stap; awk probleempje
« Reactie #5 Gepost op: 2010/09/14, 17:13:47 »
Prachtig! Nog bruikbaarder. Volgende versie met zenity vensters? Daar moet ik ook nog naar kijken namelijk. Ik blijf leren zo!

Bedankt

Bauke

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: De laatste stap; awk probleempje
« Reactie #6 Gepost op: 2010/09/14, 17:21:27 »
Ik vind het zelf niet nodig GUI dingen te gebruiken. Ik zou nu ook eerlijk gezegd niet zo goed weten wat je hier grafisch aan kunt bijdragen... Jij wel?

Met zenity beperk je ook nog eens tot gnome. Nu werkt het nog op alle versies van Ubuntu, ook op servers (waar ik nog wel eens gebruik van maak). En dikke kans dat het ook op veel andere linux distro's werkt zelfs :)

PS. Zou je misschien de naam van dit topic wat duidelijker kunnen maken? Nu zegt het weinig over de inhoud. Iets met awk en 'zoeken op dubbele bestanden' zegt al meer.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: OPGELOST Zoeken naar dubbele bestanden met find en awk
« Reactie #7 Gepost op: 2010/09/14, 18:58:32 »
Je zou kunnen laten vragen naar:
- het pad
- meerdere extensies (waarmee je een foto zoeken, tekst zoeken, pdf zoeken script combineert)
- het wel of niet meenemen van verborgen (.) bestanden en dirs
- aantal te doorzoeken subdirs ......

Ga nog even bezig om het path ook in naam van het laatste bestand te krijgen (mawk maar weer)

Bauke

Offline BaukeP

  • Lid
Re: OPGELOST Zoeken naar dubbele bestanden met find en awk
« Reactie #8 Gepost op: 2010/09/14, 19:43:15 »
Ik dacht even slim te zijn met:
P1 = mawk '{gsub("/","-");print}' $P (om de slashes uit het path te verwijderen en te vervangen door -, zodat het geheel in de naam verwerkt kan worden maar dat werkt even niet.

Wie heeft hier een oplossing voor?

Bauke