ubuntuusers.de

Brauche Bash-Schnipsel: Bestimmte Dateinamen löschen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

CyborgMax

Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

Hallo,

ich arbeite seit einiger Zeit ganz gut mit F-Spot. Ich habe damit haufenweise neue Versionen vieler Bilder erstellt. Nun möchte ich aber aus einigen Bilderreihen (in Ordnern organisiert) die Originale wieder löschen.

Ein Ordner hat nun also beispielsweise Folgende Daten:

DSC0177.JPG
DSC0178 (Bearbeitet).JPG
DSC0178.JPG
DSC0179 (Bearbeitet).JPG
DSC0179.JPG
DSC0181 (Bearbeitet).JPG
DSC0181.JPG
DSC0182.JPG
DSC0183 (Bearbeitet).JPG
DSC0183.JPG
DSC0184 (Bearbeitet (2)).JPG
DSC0184 (Bearbeitet).JPG
DSC0184.JPG
DSC0187 (Bearbeitet).JPG
DSC0187.JPG
DSC0189 (Bearbeitet).JPG
DSC0189.JPG

Ich möchte nun ein Skript erstellen, das folgendes macht.

"Schaue, ob es zu einer Datei eine bearbeitete Version gibt und lösche dann das Original!"

Ich würde mich über ein paar Tipps sehr freuen.

Gruß.

comm_a_nder

Avatar von comm_a_nder

Anmeldungsdatum:
5. Februar 2006

Beiträge: 2533

Wohnort: Dresden

for fn in $(find -name '*Bearbeitet*'); do rm -v "${fn%% (Bearbeitet*}.${fn##*.}"; done

CyborgMax

(Themenstarter)
Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

Da bekomme ich:

maximilian@max-notebook:~/Desktop/Portraits Januar 2008$ for fn in $(find -name '*Bearbeitet*'); do rm -v "${fn%% (Bearbeitet*}.${fn##*.}"; done
rm: Entfernen von „./pict0123./pict0123“ nicht möglich: No such file or directory
rm: Entfernen von „(Bearbeitet).jpg.jpg“ nicht möglich: No such file or directory
rm: Entfernen von „./pict0226./pict0226“ nicht möglich: No such file or directory
rm: Entfernen von „(Bearbeitet).jpg.jpg“ nicht möglich: No such file or directory
[...]

comm_a_nder

Avatar von comm_a_nder

Anmeldungsdatum:
5. Februar 2006

Beiträge: 2533

Wohnort: Dresden

d'oh, ich hab vermasselt, den IFS zu setzen:

OIFS=$IFS; IFS=$'\n'; for fn in $(find -name '*Bearbeitet*'); do rm -v "${fn%% (Bearbeitet*}.${fn##*.}"; done; IFS=$OIFS


Zum Testen, ob es die richtigen Files loeschen wurede kannst Du ja folgendes vorher machen:

OIFS=$IFS; IFS=$'\n'; for fn in $(find -name '*Bearbeitet*'); do echo " rm -v ${fn%% (Bearbeitet*}.${fn##*.}"; done; IFS=$OIFS

CyborgMax

(Themenstarter)
Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

Danke, das hat geklappt. (Darauf wäre ich niemals selber gekommen.) Klasse Hilfe!

Ich hab noch eines vergessen dabei: Die Pfade müssen ja noch aus der F-Spot-Datenbank entfernt werden. Jetzt hab ic noch die Ganzen Phantomversionen in F-Spot drin. (Hab nen' Backup gemacht, vondaher kein Problem.) Ich schätze mal, das wird ein bischen schwieriger...

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Ich verstehe nicht, warum immer an der IFS rumgespielt wird 😀

find -name '*Bearbeitet*' | while read fn ; do rm -v "${fn%% (Bearbeitet*}.${fn##*.}" ; done

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Zumal IFS ja gar nicht mal so ungefährlich sein soll...

Soxda2

Avatar von Soxda2

Anmeldungsdatum:
21. Januar 2008

Beiträge: 296

Wohnort: Frankfurt (Oder)

Mr. Kanister hat geschrieben:

Ich verstehe nicht, warum immer an der IFS rumgespielt wird 😀

find -name '*Bearbeitet*' | while read fn ; do rm -v "${fn%% (Bearbeitet*}.${fn##*.}" ; done

Wo lernt man diese Syntax ? gibt es dafür irgendwo ein Tutorial ?

comm_a_nder

Avatar von comm_a_nder

Anmeldungsdatum:
5. Februar 2006

Beiträge: 2533

Wohnort: Dresden

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

CyborgMax hat geschrieben:

Ich hab noch eines vergessen dabei: Die Pfade müssen ja noch aus der F-Spot-Datenbank entfernt werden. Jetzt hab ic noch die Ganzen Phantomversionen in F-Spot drin. (Hab nen' Backup gemacht, vondaher kein Problem.)

Irgendwie taugt ein Programm nichts, welches seine eigene Datenbank nicht von Phantomdaten befreien kann. Haben die fspot Entwickler nie daran gedacht, dass User auch mal den Dateimanager zum Löschen nutzen?

Ach halt, dass ist ja ein Gnome-Programm, ein solch kompliziertes Extra-Feature könnte die User ja überfordern 😉 scnr

CyborgMax hat geschrieben:

Ich schätze mal, das wird ein bischen schwieriger...

Das kommt auf die Datenbank an, die fspot verwendet. Wenn es sqlite ist, ist das relativ einfach. Wenn es irgendwas eigenes ist, dann ist das schon schwerer.

CyborgMax

(Themenstarter)
Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

he... das ist mein Topic. Wer hat das als gelöst markiert? TzTz...
Das Problem, wie ich die Bilder aus der F-Spot-Datenbank kriege ist noch nicht behoben.
Trotzdem Danke für die bisherigen Antworten.

CyborgMax

(Themenstarter)
Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

Lunar hat geschrieben:

@CyborgMax
Da müssen schon mehr Infos her: Welches Format hat die fspot Datenbank denn?

Sqlite db und befindet sich in ~/.gnome2/f-spot/photos.db.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

CyborgMax hat geschrieben:

Lunar hat geschrieben:

@CyborgMax
Da müssen schon mehr Infos her: Welches Format hat die fspot Datenbank denn?

Sqlite db und befindet sich in ~/.gnome2/f-spot/photos.db.

Die Ausgabe von "sqlite3 ~/.gnome2/f-spot/photos.db .schema" bitte. Daran kann man die Struktur der DB erkennen. Alles, was dann noch bleibt, ist alle Dateien aus der DB abzufragen, sie auf Existenz überprüfen und Einträge nicht existierender Dateien löschen. Das kann man auf die unbequeme Art in Bash machen, oder auf sehr elegante Weise in Python, Perl oder Ruby lösen. Dabei hilft dir sicher jemand, nur braucht man dazu erstmal das DB-Schema.

CyborgMax

(Themenstarter)
Avatar von CyborgMax

Anmeldungsdatum:
9. Dezember 2005

Beiträge: 555

http://ubuntuusers.de/paste/32027/

wollte mein Terminal komischerweise nicht etwas ordentlicher ausgeben.

Antworten |