Wie öffne ich mehrere Bilddateien nacheinander über die Befehlszeile, um sie zu bearbeiten?


7

Nehmen wir an, ich muss drei Bilddateien bearbeiten. Bedenken Sie, dass sich alle Dateien in befinden ~/Pictures. Der Name der ersten Datei sei 1.svg, der Name der zweiten Datei sei 2.svgund der Name der dritten Datei sei. 3.svgIch habe den Inkscape-Editor. Jetzt möchte ich, dass ein Bash-Skript ausgeführt wird, damit Folgendes geschehen muss:

  1. Zuerst 1.svgmuss sich für mich öffnen, um zu bearbeiten.
  2. Wenn ich diese Datei nach dem Bearbeiten schließe, 2.svgmuss sie automatisch geöffnet werden, damit ich sie bearbeiten kann.
  3. Wenn ich die Bearbeitung abgeschlossen habe 2.svg, möchte ich 3.svgsie zur Bearbeitung öffnen.
  4. Nach dem Bearbeiten 3.svgmuss das Skript nun durch Schließen von GIMP beendet werden.

PS: - Wenn Sie sich fragen, ob dies Hausarbeit ist, ist es nicht! Siehe hier . Sie werden feststellen, dass ich dort Bilder bearbeiten muss. Um diese Antwort besser zu machen, brauche ich hier Hilfe. Also bitte helfen. Auch ich bin ein vollständiger Anfänger . Ich weiß nichts über Bash. So erläutern Sie Ihre Antwort so ausführlich wie möglich . Sie können auch eine Antwort mit dem GIMP-Editor geben, um JPG-Dateien zu bearbeiten. Es könnte für andere nützlich sein. Ich benutze übrigens 14.04 LTS. Danke im Voraus.

UPDATE: - Die oben verlinkte Antwort wurde gemäß der unten akzeptierten Antwort bearbeitet.


Warum willst du sie nicht alle gleichzeitig öffnen?
Nattgew

@Nattgew Nun, das wäre ein Chaos, wenn ich viele Dateien hätte. Haben Sie die "Alternative Methode" gesehen, die in Andrews Antwort unter dem von mir angegebenen Link erwähnt wurde?
VenkiPhy6

@Nattgew Ok .. Ich habe die Antwort dort bearbeitet und sie wird dort noch nicht genehmigt. Bitte warten Sie
einige Zeit

3
for i in 1.jpeg 2.jpeg 3.jpg; do gimp $i; done? Dies wird Gimp jedes Mal neu starten, hart. Wenn Sie das tun möchten, ohne Gimp zu schließen, sollten Sie wahrscheinlich ein Gimp-Skript verwenden (das ich überhaupt nicht verstehe). Ich denke immer noch, dass das Öffnen als Tabs, wie @Nattgew sagt, die beste Option ist ... (Übrigens, in Ihrer verknüpften Antwort werden .svgDateien besser nicht von GIMP bearbeitet; es handelt sich um Vektorformen, Sie sollten zB Inkscape verwenden).
Rmano

Antworten:


8

Wie Rmano sagt, können Sie einfach eine forSchleife im Terminal ausführen :

for i in 1.jpg 2.jpg 3.jpg; do gimp $i; done

Führen Sie dies entweder in dem Verzeichnis aus, in dem sich die Dateien befinden, oder jede Datei sollte den Rest des Pfads dazu haben. Sie können dort so viele Dateien ablegen, wie Sie möchten.

GIMP öffnet die Datei, Sie bearbeiten sie und schließen dann GIMP. Sobald GIMP geschlossen ist, wird die forSchleife fortgesetzt und die nächste Datei in der Liste geöffnet.

Wenn Sie GIMP nicht jedes Mal schließen möchten, können Sie Folgendes hinzufügen read -p:

for i in 1.jpg 2.jpg 3.jpg; do gimp $i && read -p "Press [Enter] key to continue..."; done

Sobald Sie die Bearbeitung einer Datei abgeschlossen haben, sollten Sie im Terminal die Eingabetaste drücken können, und die nächste Datei sollte in GIMP geöffnet werden, ohne dass GIMP geschlossen werden muss.

Dies ist der einfachste Weg, den ich mir vorstellen kann. Es kann kompliziert werden, zu erkennen, wann GIMP eine Datei schließt.

Hinweis für Ihren Fall

Die meisten Dateien sind SVG-Dateien, wie Rmano hervorhob. Listen Sie also alle Ihre SVG-Dateien auf und ersetzen Sie sie gimpdurch inkscape. Die PNG-Dateien sind in Ordnung mit gimp.


Richtig .. Übrigens kann ich beliebig viele Dateien hinzufügen, oder? Nicht nur drei ... Außerdem sollte ich mich im Ordner ~ / Pictures befinden, damit dies ausgeführt wird, oder kann ich den Pfad dort erwähnen?
VenkiPhy6

@ Venki Du musst im ~/PicturesVerzeichnis sein, ja. und Sie können einfach durch einen gimpbeliebigen Editor ersetzen, den Sie verwenden möchten.
Seth

@Nattgew Ihre Methode funktioniert gut! Aber das Thema, das besagt, dass meine Datei nicht gespeichert werden konnte, wurde komplett geändert.
VenkiPhy6

@Nattgew Ich habe Seths Antwort unten als Bash-Skript ausgeführt (ich meine, ich habe sie als .sh-Datei gespeichert und ausgeführt) und versucht, meine Änderungen darin zu speichern, und es hat
einwandfrei

@ Venki Die Datei konnte wahrscheinlich nicht gespeichert werden, da Sie keine sudoBerechtigungen verwenden. Sie müssen verwenden, sudoweil Sie Dateien in bearbeiten /usr. IMO ist diese Antwort immer noch besser als meine.
Seth

7

Der folgende Befehl öffnet die Dateien in der zugeordneten Standardanwendung :

edit 1.svg 2.svg 3.svg

Wenn Sie alle .svgDateien in alphabetischer Reihenfolge öffnen möchten , können Sie den *Platzhalter verwenden:

edit *.svg

*steht für eine beliebige Folge von Zeichen, sodass Sie sie auf andere Weise verwenden können; Zum Beispiel, um nacheinander die .svgDateien zu öffnen , deren Name Folgendes enthält wibble:

edit *wibble*.svg

Andere Platzhalter sind vorhanden, wenn Sie Dateien basierend auf feinkörnigeren Mustern auswählen möchten.


Dies ist bei weitem die beste Antwort.
Seth

Ich würde verwenden, find -execwenn ich einige von ihnen selektiv öffnen möchte.
Braiam

2

Sie könnten so etwas versuchen:

shopt -s nullglob
for i in *
do
    if [ -d "$i"  ]
     then
        continue
    else
        inkscape "$i"

    fi
done

Ich habe es in meinem Bilderverzeichnis getestet und es schien zu funktionieren.

Ich verstehe die erste Zeile noch nicht ganz, aber sie soll dazu beitragen, dass meine *Werke funktionieren. Die forSchleife durchläuft dann nacheinander alles im aktuellen Verzeichnis. Wenn es sich nicht um ein Verzeichnis handelt, wird es zur Bearbeitung in Inkscape geöffnet.

Wenn Sie mit dem Bearbeiten und Schließen von inkscape fertig sind, wird das nächste Bild geöffnet, bis keine Bilder mehr vorhanden sind.


Für Ihren speziellen Fall (nach dem Lesen der verknüpften Frage) funktioniert dies möglicherweise besser. Denken Sie daran, cdzu /usr/share/unity/iconsund führen Sie dies:

for i in file1.svg file2.svg file3.svg
do
    if [ -d "$i"  ]
     then
        continue
    else
        inkscape "$i"

    fi
done  

Ersetzen file1.svg file2.svg file3.svgdurch eine Liste der Dateien, die Sie bearbeiten möchten.


Ich denke, nullglobbedeutet es , dass es nicht versucht, ein Literal zu iterieren, *wenn es mit nichts anderem übereinstimmt?
Nattgew

@Nattgew Das ist richtig, nachdem ich mehr darüber nachgedacht habe.
Seth

@ Seth Ich habe deine Antwort in gedit eingefügt, sie als .sh-Datei gespeichert und ausgeführt ... es hat wie ein Traum funktioniert !!!! Aber es gibt ein paar Fehler ... hier ist die .sh-Datei, die ich gespeichert habe: pastebin.ubuntu.com/7332714 und hier ist die Terminalmeldung, die angezeigt wird : pastebin.ubuntu.com/7332719 Wahrscheinlich stimmt etwas mit der CD nicht Befehl, den ich in meinem Bash-Skript hinzugefügt habe? Oder sollte Ihre Antwort so lauten?
VenkiPhy6

2
@ Venki Ich brauche wahrscheinlich keine doppelten Klammern. Ich habe sie entfernt. Möglicherweise müssen Sie auch verwenden, sudo inkscapeda Sie Dateien in / usr bearbeiten.
Seth

2
@ Venki die Fehler waren, weil Sie verwendet haben /bin/sh(was dashauf Ubuntu-Systemen ist) und nicht bash. Der [[ ]]Test ist nicht verfügbar in dash. Ändern Sie einfach Ihre erste Zeile (den Shebang) in #!/bin/bashoder, #!/usr/bin/env bashund Seths erste Version wird gut funktionieren.
Terdon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.