ubuntuusers.de

Bilder löschen, von denen keine komprimierte Version existiert.

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

Stata-Head

Anmeldungsdatum:
6. Mai 2014

Beiträge: Zähle...

Hallo zusammen,

es passt vielleicht thematisch nicht ganz perfekt in diese Diskussion. Ich denke aber, die Problematik ist sehr ähnlich. Vielleicht kann mir jemand helfen. Shell Programmierung ist sehr neu für mich. Ich suche schon etwas länger nach eine geeigneten Lösung für folgendes Problem:

Ich würde gerne meine Bilder Ordner aufräumen. Die Bilder in den Ordner sind immer, da ich Bilder verkleinert habe (für den E-Mail versandt), in folgender Form in den Ordnern abgelegt:

DSC00120.JPG
wwwDSC00120.JPG
DSC00121.JPG
DSC00122.JPG

etc.

Behalten würde ich gerne nur das "matching Paar", also wwwDSC00120.JPG und DSC00120.JPG. Der Rest der JPG's soll gelöscht werden per Skript. Ich weiß leider auch nicht, ob mein Ansatz überhaupt stimmt.

1
2
#!/bin/bash 
find -iname 'www*.[jJpPgG][pPnNiI][gGfF]' | while read wwwDSC_NAME;

Vielleicht kann jemand helfen. Es sind nämlich ziemlich viele Ordner und Dateien angefallen. Das wäre wirklich prima! Vielen lieben Dank!

Moderiert von jug:

Beitrag abgetrennt von hier. Bitte eröffne für deine Fragen immer ein eigenes Thema und hänge dich nicht an fremde Themen dran (siehe Verhaltenskodex), danke!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

  1. Ein neues Thema sollte bitte in einem neuen Strang gestellt werden.

  2. Du müsstest die Frage wahrscheinlich anders herum stellen: ruf alle nicht-www-Bilder auf, und wenn es kein www-Bild dazu gibt, lösche es.
    Ich würde dafür eine for- Schleife nehmen, die ist etwas einfacher zu bedienen.

LG,

track

Stata-Head

(Themenstarter)

Anmeldungsdatum:
6. Mai 2014

Beiträge: 4

Danke für die umgehende Antwort. Ich habe nun ein paar Stunden experimentiert. Es werden jedoch immer alle DSC*.JPG gelöscht und alle wwwDSC*.JPG bleiben erhalten. Meine for Abfrage sieht nun so aus:

1
2
3
4
5
6
#!/bin/bash 
for i in DSC*.[jJpPgG][pPnNiI][gGfF]; do
 if ! [www$i]; then
  rm $i	
 fi
done

Wahrscheinlich ist es einfach schon zu spät. Sehen wir morgen mal weiter. Ich wäre aber für weitere Anregungen sehr sehr dankbar! Vielen Dank!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Na ja, bis auf ein paar handwerkliche Dinge sieht das doch schon mal besser aus !

  1. Merke: Variablen, in denen ein Leerzeichen vorkommen könnte, sollte man immer "quoten". (ganz besonders in Z. 4, bei einem rm !)

  2. Die Datei-exististiert-Frage geht in der Shell anders: if ! [ -f "www$i" ]; then → Siehe im Bash-Manual

  3. Beachte die Leerzeichen vor und hinter den eckigen Klammern ! - hier ist die Shell ausgeprochen pingelig damit. (sonst oft nicht)

  4. (Einrückungen sollten nach Ebenen gehen: Z. 3-5 sind das Innenleben der for- Schleife, würden also 1x 4 (oder 8) Leerzeichen (oder 1 TAB) eingerückt,
    Z. 4 ist das Innenleben der if- Abfrage, würde also 2x eingerückt. Deine Mini-Einrückung ist undeutlich.)

LG,

track

Stata-Head

(Themenstarter)

Anmeldungsdatum:
6. Mai 2014

Beiträge: 4

Hallo track,

danke dir recht herzlich für die ausführlichen Informationen! Es funktioniert nun, nachdem ich die if Abfrage angepasst habe! Der Code sieht nun letztendlich so aus.

1
2
3
4
5
6
#!/bin/bash 
for i in DSC*.[jJpPgG][pPnNiI][gGfF]; do
	if ! [ -f "www$i" ]; then
		rm "$i"	
	fi
done

Vielen Dank noch einmal track!!!

Antworten |