Bash-Skript zum Ziehen und Ablegen einer Datei an einen neuen Speicherort

8

Ich bin mir sicher, dass ich meinen Arsch für diese Frage bekommen werde, aber ich kann es einfach nicht herausfinden. Ich bin neu im Bash-Scripting, also schont mich ...

Ich möchte in der Lage sein, eine Datei per Drag & Drop auf eine Desktop-Anwendung zu ziehen, die dann ein Bash-Skript aufruft, das diese Datei an einen im Bash-Skript angegebenen Speicherort verschiebt. Hier ist was für ein bisher.

Bash-Skript

#! /bin/bash

mv $file /path/to/new/directory

Ich kann jedoch nicht herausfinden, wie $fileich die Variable als Variable eingeben und ablegen kann, wenn ich sie auf eine Desktop-Anwendung ziehe und dort ablege. Wie kann ich das machen?

Grund: Ich habe Papiere, die ich in einem Ordner lesen muss, und sobald ich sie gelesen habe, lege ich sie in einen anderen Ordner. Ich möchte es im Grunde nur einfach machen, dies zu tun.

Danke, Paul

PaulFrater
quelle
2
Ich verstehe nicht, warum ziehst du sie nicht einfach per Drag & Drop, wenn du das willst? Sie scheinen sich zu fragen, wie Sie in Ordner1 ziehen sollen, wodurch das gezogene Element in Ordner 2 verschoben wird. Warum ziehen Sie es nicht einfach direkt in Ordner2?
Terdon
2
Ich kenne keinen Dateimanager, mit dem Sie eine Datei per Drag & Drop auf eine Anwendung ziehen und diese Datei dann an die Anwendung übergeben können, um etwas damit zu tun. Jeder Dateimanager, den ich verwendet habe, unterstützt nur das Ziehen von Dateien in Ordner. Haben Sie Grund zu der Annahme, dass dies möglich sein könnte? Haben Sie eine Anwendung gesehen, die so funktioniert? Sie können dies natürlich mit einer Webanwendung (die dann die Drag & Drop-API des Browsers bereitstellt) oder einem anderen komplexeren Anwendungstyp tun. Dies ist jedoch möglicherweise zu komplex, um in einer AskUbuntu-Antwort erklärt zu werden.
Robin Winslow
1
Tun dies nicht die meisten Terminals und Dateimanager? Wenn Sie in XFCE eine Datei von Thunar auf ein Terminal ziehen, wird der vollständige Dateiname eingefügt. Wenn Sie eine Datei auf etwas wie LibreOffice oder Gedit ziehen, wird sie geöffnet ( versuchen Sie es zumindest ). Das klingt so, als ob es ganz bei der Anwendung liegt, mit dem Dateinamen zu tun, was sie will.
Xen2050
@terdon. Ja, ich möchte nur per Drag & Drop in einen anderen Ordner ziehen, aber ich wollte einen schnellen Weg, dies zu tun, ohne aus dem Verzeichnis, in dem ich mich befand, aussteigen zu müssen und den ganzen Weg in ein neues Verzeichnis zu verschieben und dann die Datei dort abzulegen. Das scheint mir einfach ineffizient zu sein. Für alle anderen siehe die Antwort von Slug45 unten.
PaulFrater

Antworten:

24
  1. Erstellen Sie eine Bash-Skriptdatei mit den folgenden Inhalten:

    #!/bin/bash
    mv "$1" "PATH_TO_NEW_DIRECTORY"
    
  2. Erstellen Sie eine .desktop-Datei mit den folgenden Inhalten:

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
    
  3. Ändern Sie PATH_TO_NEW_DIRECTORY und PATH_TO_SCRIPT_FILE nach Ihren Wünschen.

  4. Tun chmod +x script_name

  5. Ziehen Sie Dateien in die .desktop-Datei.

  6. Erledigt!.

Slug45
quelle
1
Es sollte betont werden , dass Sie immer die Variablen zitieren müssen, wie gezeigt. Die Verwendung $fileanstelle von "$file"(oder "${file}") kann zu Problemen führen.
Paddy Landau
Auch hier keine Notwendigkeit zu verwenden bash; #!/bin/shist ausreichend, um dasselbe zu tun (obwohl es bashauf vielen Systemen ohnehin damit verbunden sein kann).
Ckujau
14

Kein Skript erforderlich. Erstellen Sie einen Link zu PATH_TO_NEW_DIRECTORY, wo Sie ihn benötigen. Ziehen Sie dann die Datei auf den Link

Jean-Marie
quelle
2
Dies wäre eine einfachere Lösung gewesen (aber dann hätte ich nichts über Bash-Scripting gelernt :)
PaulFrater
Dies ist der "offensichtliche" Weg, dies zu tun und die Frage zu beantworten. Wenn Sie jedoch ein Skript verwenden, kann dieses Skript beliebig komplex sein und je nach übergebener Datei unterschiedliche Aufgaben ausführen - z. B. Musikdateien an einem Ort und Dokumente an einem anderen Ort ablegen - oder einfach das Ziel ändern, ohne den Symlink ersetzen zu müssen.
Joe
3

Was @ Slug45 gesagt hat, ist völlig richtig. Es fehlt jedoch eine Erklärung.

Wenn Sie eine Datei per Drag & Drop auf eine ausführbare Datei (oder einen Link zu einer) ziehen, wird diese ausführbare Datei mit dem Pfad zur gezogenen Datei als Argument ausgeführt. Dies ist genau das gleiche unter Windows (nicht, dass es hier wirklich wichtig ist).

Bash hat eine einfache Möglichkeit, mit Argumenten umzugehen. Verwenden Sie "$@" (mit den Anführungszeichen) , um ein Array aller Argumente abzurufen (nützlich zum Beispiel in einer for..in-Schleife). $@,, "$*"und $*mache ähnliche Dinge, aber du willst fast immer "$@". Sehen Sie hier für weitere Informationen über die Besonderheiten.

Darüber hinaus können Sie direkt auf bestimmte Argumente zugreifen, $Xwobei X die Argumentnummer ist. Zum Beispiel:

$ cat ./args.sh
echo $1
echo $2
echo $3
$ ./args.sh foo bar baz
foo
bar
baz
$

In großen Skripten ist es besser, diese benannten Variablen zuzuweisen:

$ cat music.sh
#!/bin/bash
# Usage: ./music.sh Artist Album Song
ARTIST=$1
ALBUM=$2
SONG=$3

if [ $ARTIST -eq "Nickelback" ]; then exit; fi

mplayer ~/Music/$ARTIST/$ALBUM/$SONG.mp3
Duncan X Simpson
quelle