Skript: Kleinste Bilder löschen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
TheGrudge
Beiträge: 270
Registriert: 20.05.2003 12:13:57

Skript: Kleinste Bilder löschen?

Beitrag von TheGrudge » 30.10.2003 23:43:52

habe mir ein skript geschrieben, das bilder runterlädt.
so nun möchte ich irgendwie die thumbnails löschen.
habe mal folgendes gemacht:

Code: Alles auswählen

find . type f -exec identify {} \; | awk '{print $3"\t"$1}' | sort -n > pic_info
so, nun habe ich die infos über die dateigrösse in einer datei, sortiert nach grösse...

sowas wie:
100x100 ./bild01.jpg
120x110 ./bild02.jpg
usw...

nagut...
wie stelle ich es jetzt an, dass alle dateien, die sagen wir mal <250x250 sind, gelöscht werden?
wie kann ich diese liste (vielleicht mit grep) bearbeiten, so das nur noch die einträge der kleinsten dateien dastehen?
und dann am besten noch löschen?

habe da irgendwie keinen plan...

Benutzeravatar
npi
Beiträge: 567
Registriert: 03.08.2003 17:52:10

Beitrag von npi » 03.11.2003 00:08:46

mit perl zeile für zeile parsen, die dateien mit den gewünschten Kriterien raussuchen und löschen, dürfte nicht so schwer sein, kann dir jetzt kein codebeispiel geben aber ich arbeite dran 8)

npi

Benutzeravatar
npi
Beiträge: 567
Registriert: 03.08.2003 17:52:10

Beitrag von npi » 03.11.2003 15:04:49

ich hab mal ein wenig rumgebastelt und dabei ist das hier rausgekommen:

Code: Alles auswählen

#! /usr/bin/perl -w
# Perl-Skript um eine Bilderliste zu analysieren und nach bestimmten kriterien zu löschen
# (c) 2003, by Manuel .'NPI'. Aiple
# Gebrauch: rmsmallpics.pl LISTENDATEI HRES VRES

sub addtolist(){
  $listeneu[$k] = $liste[$i];
  $k++;
}

$dateiname = $ARGV[0];
$hres = $ARGV[1];
$vres = $ARGV[2];
if (!$dateiname || !$hres || !$vres){
  print "Gebrauch: rmsmallpics.pl LISTENDATEI HRES VRES\n";
  exit 1;
}
open(DATEI,"<$dateiname");
@liste=<DATEI>;
close(DATEI);
$k = 0;
for ($i=0; $i<=$#liste; $i++){
  @zeile = split(/ /, $liste[$i]);
  @auflsng = split(/x/, $zeile[0]);
  if (($auflsng[0] < $hres) || ($auflsng[1] < $vres)){
    chop($zeile[1]);
    print "Bild löschen: $zeile[1] Auflösung: $auflsng[0]x$auflsng[1] ?";
    $rm = <STDIN>;
    $rm = substr($rm, 0, 1);
    if (($rm eq 'y') || ($rm eq 'j')){
      `rm $zeile[1]`
    } else{
      &addtolist();
    }
  } else{
    &addtolist();
  }
}
print "@listeneu\n";
if (@listeneu){
  open(DATEI,">$dateiname.neu");
  print DATEI @listeneu;
} else{
  `rm $dateiname.neu`;
}

vielleicht hilft's dir ja, ist halt jetzt nur mal grob in aller schnelle ausgetüftelt, die feinarbeit überlass ich dann dir ;-)

npi

Benutzeravatar
TheGrudge
Beiträge: 270
Registriert: 20.05.2003 12:13:57

Beitrag von TheGrudge » 03.11.2003 15:20:10

?? wieso ist denn mein Beitrag weg?
naja...

also ich hatte gestern schon geschrieben, das ich mittlerweile eine lösung habe:

Code: Alles auswählen

find . -type f -exec TESTFORTHUMBS {} \;
TESTFORTHUMBS:

Code: Alles auswählen

#!/bin/bash

width=`identify -format "%w" "$1"`
height=`identify -format "%h" "$1"`

if [ $width -lt 250 ]
then rm "$1"
echo "$1 ... deleted!"
exit 1
fi

if [ $height -lt 250 ]
then rm "$1"
echo "$1 ... deleted!"
fi
so funktioniert es jedenfalls ganz gut...

aber vielleicht gucke ich mir deine lösung auch mal näher an...
danke jedenfalls!

Antworten