Nieuws:

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

Auteur Topic: Hoe "dubbele" bestanden selecteren, gebaseerd op eerste karakters bestandsnaam  (gelezen 2474 keer)

Offline Jenske

  • Lid
Mijn foto's beginnen steeds met de code die ze in het fototoestel kregen:
LAN_2475.jpg
FML_4558.jpg

Als ik ze heb bewerkt, geef ik ze vaak een andere naam maar dan énkel door het toevoegen na die code:
LAN_2475 jos zingt.jpg
FML_4558 jos spreekt.jpg

Zo kan ik dus altijd mijn originelen vlot vinden, aangezien de eerste 8 karakters altijd in de verschillende bestandsnamen weerkeren.
VLT_4669.NEF --> origineel
VLT_4669 man eet appel.NEF --> een bewerkte kopie met verduidelijkende bestandsnaam
VLT_4669 man eet appel ZWW.jpg   --> de zwartwit versie van deze foto

Ik wil nu graag alle dubbele (of meervoudige) bestanden eruit halen, waarvan de eerste 8 letters hetzelfde zijn, om vervolgens énkel bestanden te selecteren die LATER zijn gemaakt dan het origineel. Ik wil dus NIET alle dubbele bestanden, maar énkel diegene die later zijn gemaakt dan het origineel.

Hoe kan ik dat?
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline Jenske

  • Lid
Ik heb dit namelijk nodig in het kader van mijn fotografie-workflow. Nu gebruik ik Digikam, maar dat laat niet toe om vlot alle afgeleide foto's van een reeks oorspronkelijke opnames eruit te halen.
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline jan11000

  • Lid
Krusader kun je proberen, daar zit een search functie waar je files kunt sorteren(zoeken op naam).
Van de gezochte files kun je een feedlist maken, dus alle files in je verkenner zetten, dan kun je kopiëren of wat je er mee wilt doen. Files in de feedlist staan nog steeds op de plaats waar ze stonden, als je gaat verplaatsen, dan gaan ze naar de nieuwe locatie.

Verder kun je zoeken op, double, kdiff3, komparator, kompare, om software te vinden.
In software centrum of via google.
catfish file search kun je ook proberen.

Zelf gebruik ik ook een windows programma, via wine, "doublekiller".
Is een zeer goed programma, hier kun je denk ik ook een lange lijst maken, en bepaalde files verplaatsen of kopieren, test maar uit, en er is ook een gratis versie.
Zelf heb ik de betaalversie, hier kun je mee harde schijven of andere medium, alle file namen opslaan, grootte etc. Dan kun je offline op dubbele kontroleren.
Bij kontrole maakt doublekiller een lange lijst, op naam of als extra op checksum en/of op grootte, daarna kun je sorteren of verwijder de files.
« Laatst bewerkt op: 2017/10/08, 17:30:10 door jan11000 »

Offline Parleur

  • Lid
geacht forum
Ik heb nog een tip!
Voor het doorzoeken van media op dubbele bestanden gebruik ik Fslint (in de repository)
Deze applicatie zoekt naar mijn idee óók op EXIF data of anders op exact overeenkomende  bestandsgrootte . De gevonden dubbele foto's worden gegroepeerd gepresenteerd.
Vervolgens kun je groepsgewijs selecteren welke locatie gewist moet worden.
Zie het voorbeeld in de bijlage, de bovenste bestanden zijn de zelfde foto die ik willekeurig hernoemd heb.
Ik denk dat dit is wat er gezocht word.

Offline Jenske

  • Lid
Helaas, da's niet wat ik zoek.
Ik weet dat er programma's (zoals fslint) zijn die IN de bestanden naar vergelijkingen zoeken, maar die kosten ENORM veel zoektijd als je, zoals ik, meer dan 10.000 foto's hebt te doorzoeken.

Bovendien -- zie mijn oorspronkelijke vraag -- zoek ik énkel bestanden waarvan de eerste X karakters dezelfde zijn (ongeacht inhoud van het bestand) EN die later zijn gemaakt dan het eerste bestand. Zo wil ik al mijn bewerkte bestanden eruit kunnen halen en de originele, onbewerkte bestanden over houden.

Ik vrees echter dat ik een té moeilijke vraag heb gesteld, gezien de weinige respons.

Toch bedankt voor de reacties.
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline MKe

  • Lid
Als ik je goed begrijp wel je snel kiezen op basis van de naam? Dat is vrij simpel te doen met wat Python code.
« Laatst bewerkt op: 2017/11/27, 06:42:40 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline Jenske

  • Lid
Mogelijk, maar ik ken geen bal van Python (hoewel men rond mij beweert dat het echt gemakkelijk is).

Als ik je goed begrijp wel je snel kiezen op basis van de naam? Dat is vrij simpel te doen met wat Python code.
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline jan11000

  • Lid
En wat doet krusader.

Offline vanadium

  • Lid
Mogelijk, maar ik ken geen bal van Python (hoewel men rond mij beweert dat het echt gemakkelijk is).
toch heb je hier een apart en specifiek probleem waar geen standaard software voor. Als je hier één en ander wil automatiseren, wat zal moeten gezien de grote hoeveelheid bestanden, zal je op één of andere manier moeten automatiseren.

Een "poor man's" scripting benadering die ik wel eens durf doen, is een lijst bestanden importeren in een rekenblad, daar de nodige manipulaties doen en dan daar in een afzonderlijke colom commando's synthetiseren die iets doen. Dit is een goede start:

find . -name '*.jpg' -exec ls -l --time-style=long-iso \;
Dit zal alle jpg's in je huidige directory (.) vinden. De optie  --time-style=long-iso geeft de datum in iso formaat weer: je kan darop dus ook gaan sorteren. Dit lijstje kan je importeren in een rekenblad. Daar kan je sorteren op de eerste zes letters van de naam + datum. Dan een =IF colommetje, die 1 aangeeft als de eerste zes letters veranderen. Die kolom omzetten naar vaste waarden (0 en 1) en sorteren erop: al je enen worden gegroepeerd: dat zijn de oudste, originele bestanden. In een volgende colom synthetiseer je dan bijvoorbeeld een mv commando om die bestanden te verplaatsen (of vb orig toe te voegen in de naam, zodat je later steeds die originelen er wel gemakkelijk kan uithalen). In Calc kan dat er uit zien als:
="mv '"&A1&"' ~/Originelen"
Dit zou het bestand waarvan de naam in A1 staat naar een folder "Originelen" verplaatsen.

Gewoon even een mogelijke benadering om je op weg te zetten. Veel beter nog zou zijn dit alles te doen in bash, maar daar zou ik zelf ook nog harder moeten op zoeken.

Offline Nero

  • Lid
Met find is er meer mogelijk. Is je origineel bestand bv ~/Pictures/XYfoto1.jpg dan ken je met de opdrachtfind ~/Pictures -type f -newer ~/Pictures/XYfoto1.jpg -name XY*.jpgeen selectie maken van alle bestanden in ~/Pictures en onderliggende mappen die beginnen met XY en recenter zijn dan het referentiebestand ~/Pictures/XYfoto1.jpg.

Offline vanadium

  • Lid
...maar dat zal dan weer moeilijk zijn als je met duizenden "originele" bestanden te doen hebt. Er is eerst iets nodig om een lijst te maken van die originele bestanden, d.w.z., het oudste bestand met dezelfde zes beginletters, waarna je aangegeven commando dan wel zinvol zou zijn om automatisch iets te doen met de recentere versies. Enkel met de bash commando's ls (via een find opdracht) en sort is dat wellicht al mogelijk.

Jenske,

Misschien heb jij hier wat aan:
#!/bin/bash
#A filelisting from .

FOLDER=$(pwd)
echo "Filename;Basename;Extension;Path;Full Path;Hyperlink" > Filelist.csv

find $FOLDER -type f | while read FILE
do
  FileName=$(basename "$FILE")
  BaseName="${FileName%.*}"
  Extension="${FILE##*.}"
  Path=$(dirname "$FILE")
  Hyperlink="=HYPERLINK(\"file://$FILE\")"
   
  echo "$FileName;$BaseName;$Extension;$Path/;$FILE;$Hyperlink" >> Filelist.csv
done

Een simpel bash script die alle bestanden van waar je script start in een csv bestand stop.
Deze kan je dan met oa LibreCalc bekijken fiteren etc etc ...

MvG,
MauRice
Registered Linux user: 473556

Offline Jenske

  • Lid
Hier kan ik nog het meeste mee aanvangen.
Ik heb het al eens ruw getest door de find-output te sturen naar een bestand (">LijstMetResultaten.txt") en dat dan in te lezen in Calc (met vaste kolombreedte). Werkt als ... euh ... een zonnetje.

Ben tijdens dit testen trouwens achterover gevallen van de snelheid van het uitvoeren van regelcommando's.

Ik ploeter naarstig verder.


Mogelijk, maar ik ken geen bal van Python (hoewel men rond mij beweert dat het echt gemakkelijk is).
toch heb je hier een apart en specifiek probleem waar geen standaard software voor. Als je hier één en ander wil automatiseren, wat zal moeten gezien de grote hoeveelheid bestanden, zal je op één of andere manier moeten automatiseren.

Een "poor man's" scripting benadering die ik wel eens durf doen, is een lijst bestanden importeren in een rekenblad, daar de nodige manipulaties doen en dan daar in een afzonderlijke colom commando's synthetiseren die iets doen. Dit is een goede start:

find . -name '*.jpg' -exec ls -l --time-style=long-iso \;
Dit zal alle jpg's in je huidige directory (.) vinden. De optie  --time-style=long-iso geeft de datum in iso formaat weer: je kan darop dus ook gaan sorteren. Dit lijstje kan je importeren in een rekenblad. Daar kan je sorteren op de eerste zes letters van de naam + datum. Dan een =IF colommetje, die 1 aangeeft als de eerste zes letters veranderen. Die kolom omzetten naar vaste waarden (0 en 1) en sorteren erop: al je enen worden gegroepeerd: dat zijn de oudste, originele bestanden. In een volgende colom synthetiseer je dan bijvoorbeeld een mv commando om die bestanden te verplaatsen (of vb orig toe te voegen in de naam, zodat je later steeds die originelen er wel gemakkelijk kan uithalen). In Calc kan dat er uit zien als:
="mv '"&A1&"' ~/Originelen"
Dit zou het bestand waarvan de naam in A1 staat naar een folder "Originelen" verplaatsen.

Gewoon even een mogelijke benadering om je op weg te zetten. Veel beter nog zou zijn dit alles te doen in bash, maar daar zou ik zelf ook nog harder moeten op zoeken.
.. Kubuntu 23.10 op een ...
.. geen idee welk computermerk, 32 Gbyte RAM, 4 Gbyte video-RAM

Offline Nero

  • Lid
Nog een mogelijkheid:ls -lR --time-style=long-iso | grep -i jpg$ | awk '{$1=$2=$3=$4=$5=$7="";print}' | sort -fk2

Jenske,

Nog wat uigebreidt.
Als je het bestand 'Filelist.csv' in leest in LibreCalc.
En je zet de flters aan op de kolom hoofden...
Dan kan je in kolom B filteren op bijvoorbeeld: FML_4558
En in kolom C zit al de LibreCalc formule die de aantal karakters geeft van kolom B.

Deze kan je dan filteren op groter dan 8.


#!/bin/bash
#A filelisting from .

FOLDER=$(pwd)
echo "Filename;Basename;Length Basename;Extension;Path;Full Path;Hyperlink" > Filelist.csv

i=2
find $FOLDER -type f | while read FILE
do
  FileName=$(basename "$FILE")
  BaseName="${FileName%.*}"
  Length="=LEN(B$i)"
  Extension="${FILE##*.}"
  Path=$(dirname "$FILE")
  Hyperlink="=HYPERLINK(\"file://$FILE\")"
   
  echo "$FileName;$BaseName;$Length;$Extension;$Path/;$FILE;$Hyperlink" >> Filelist.csv
  ((i++))
done


PS:
Ik gebruik als scheiding teken een punt-comma teken (:).
MvG,
MauRice
Registered Linux user: 473556