Wie lassen sich mehrere Dateien per Drag & Drop in ein Bash-Skript einbinden?

650
Linuxwhisperer

Ich verwende Dolphin in einer KDE Plasma 5 Desktop-Umgebung. Hier habe ich ein Bash-Skript geschrieben, das genau EINE Datei ausarbeiten kann, wenn ich eine Datei aus Dolphin ziehe und sie auf ein ".desktop" definiertes Skript mit einem Symbol ablege, das dann zB ausgeführt wird /home/user/scripts/list_all_drags.sh %f.

Dies funktioniert mit einer solchen Datei. Nun möchte ich einige ausgewählte Dateien aus Dolphin in das Skript ziehen und das Skript sollte seine Prozeduren für jeden Dateieintrag ausarbeiten. Dies funktioniert nicht, obwohl ich %Fmehrere Dateien anstelle %feiner einzelnen Datei verwendet habe.

Was passiert ist, dass mehrere Terminalfenster geöffnet werden, eines für jeden Dateieintrag. Was ich brauche, ist der Code, der in EINEM Skript ausgeführt wird, für jeden gelöschten Dateieintrag, ohne mehrere Terminalfenster zu öffnen, aber das erste. Genau, die "Schleife" zu starten oder die Befehle mit den abgelegten Dateien auszuführen, ohne dass ein weiterer Tastendruck erforderlich ist.

Ich weiß nicht, wie ich den %FParameterwert in meinem Skript behandeln soll.

0
Funktioniert für mich wie angekündigt, ich bekomme die separaten Skripts nur, wenn ich% F durch% f ersetze. Wie erstellen Sie das .desktop? xenoid vor 7 Jahren 0
Wenn Sie mit der rechten Maustaste auf das Menüsymbol links unten klicken und "Anwendungen bearbeiten" (erster Eintrag) wählen, wird die KDE-Menüstruktur angezeigt. Hier können Sie eine Gruppe auswählen und innerhalb der Gruppe können Sie in der Menüleiste "Neues Element" auswählen. Dies ist bereits eine ".desktop" -Basisdatei, die Sie für Ihre Anforderungen übernehmen können. Linuxwhisperer vor 7 Jahren 0
... benennen Sie es, wählen Sie ein Symbol aus und wählen Sie das Programm oder Skript aus, das Sie ausführen möchten. Anschließend müssen Sie "Speichern" (linker Eintrag in der Menüleiste) wählen, um diese neue ".desktop" -Datei mit dem Namen erstellen zu können wie du es genannt hast. Diese Datei wird gespeichert unter: /home/user/.local/share/plasma_icons Linuxwhisperer vor 7 Jahren 0
Ja, ich weiß, aber das erstellt kein Symbol auf dem Desktop ... Wohin ziehen Sie Ihre Dateien? Wenn Sie mehrere Dateien in Dolphin auswählen, klicken Sie mit der rechten Maustaste, Öffnen mit ... und wählen Sie Ihre App aus. Werden sie alle zusammen verarbeitet, oder erhalten sie immer noch eine Skriptinstanz? xenoid vor 7 Jahren 0
Wenn Sie das neue Element mit "Speichern" abgeschlossen haben, können Sie es finden, indem Sie den Namen eingeben, wenn Sie das KDE-Menü (Plasma) öffnen. Dann können Sie das neue Element (Symbol) per Drag & Drop auf Ihren Desktop oder in eine Aufgabenzeile ziehen. Linuxwhisperer vor 7 Jahren 0
Immer noch eine einzige Hinrichtung. Hast du das "Öffnen mit>" ausprobiert? xenoid vor 7 Jahren 0
Nein, habe ich nicht. Das war nicht der Zweck meines Ziels. Ich möchte einfach mein Skript für jede einzelne markierte (ausgewählte) Datei ausgeführt haben, da es leicht möglich ist, ausgewählte Dateien von einem Ort an einen anderen Ort zu ziehen. Linuxwhisperer vor 7 Jahren 0
Ja, aber es sollte dasselbe Verhalten sein, da Sie dieselbe .desktop-Datei verwenden. Wenn Sie auf diese Weise einen einzelnen Skriptaufruf erhalten; das .desktop ist in Ordnung und das Problem ist an anderer Stelle. Wenn Sie das Problem debuggen, wissen Sie ... xenoid vor 7 Jahren 0

1 Antwort auf die Frage

0
Linuxwhisperer

Ich denke, ich habe die richtige Antwort gefunden, vor allem, wie man die mehrfachen Parameter mit% F behandelt.

Zuerst wähle ich meine Einträge (Dateien) in einem Dateimanager aus. Zweitens ziehe ich alle markierten Dateien auf mein Skript-Symbol und lege sie auf dieses Symbol. In diesem Skript, das mit "/home/user/scripts/myscript.sh% F" ausgeführt wird, befindet sich eine Routine, die alle ausgewählten Dateieinträge ausgearbeitet.

Ich bin mir zwar nicht sicher, wie viele Parameter (Dateien) dann massenweise ausgewählt und ausgeführt werden könnten, aber diese Routine hilft mir dabei, alle einzelnen Parameter größer als 0 (die meine ausgewählten, meine markierten Dateien sind) hochzurechnen:

while (( $# > 0 )) # or [ $# -gt 0 ] do echo "$1" shift done

Anstelle von "echo $ 1" kann ich sagen

file = $1

und dann meine Subroutine aufrufen, wo ich mit $ file arbeite

Besonderer Dank an diesem Beitrag: Wie man mehr als 10 Parameter in einer Shell behandelt