Erstellen eines Alias ​​für den Papierkorb

1856
phenomenon

Ich bin ein Neuling. Ich habe einen Alias ​​in der .bashrc-Datei wie folgt festgelegt.

alias myrm='mv /home/user/Trash/*' 

Wenn ich myrm comment verwende, zum Beispiel $ myrm foo, muss die Datei "foo" in den Papierkorbordner verschoben werden, der sich in meinem Home-Ordner (/ home / user / Papierkorb) befindet.

Dann tat ich es

$source ~/.bashrc 

Wenn ich danach versuche, myrm durch Eingabe von $ myrm foo zu verwenden, erhalte ich die folgende Fehlermeldung.

mv: kann stat '/ home / user / Trash / *' nicht: Keine solche Datei oder Verzeichnis

Wie kann dieses Problem gelöst werden?

7
Die Syntax ist "mv SOURCE DESTINATION" und nicht "mv DESTINATION SOURCE". Siehe "man mv" und "help alias". Verwenden Sie eine Funktion. Siehe "Hilfefunktion". Cyrus vor 6 Jahren 2
Untersuchen Sie [Positionsparameter] (https://www.gnu.org/software/bash/manual/html_node/Positional-Parameters.html#Positional-Parameters). Ihr Skript wünscht einen $ 1 zwischen dem MV und dem Zielordner, um die "Foo" zu übernehmen, die Sie beim Ausführen des Skripts angeben. mcalex vor 6 Jahren 0
Problemumgehung: `alias myrm = 'mv -t / home / user / Trash'` Cyrus vor 6 Jahren 7
@ Cyrus Es ist keine Problemumgehung, es ist * der richtige Weg *. Kamil Maciorowski vor 6 Jahren 1
Danke @Cyrus und andere für Kommentare. Der Alias ​​myrm = 'mv -t / home / user / Trash /} hat das Problem gelöst. phenomenon vor 6 Jahren 0
Wenn Sie zu ~ / Trash wechseln, können Sie die Datei nicht mit den Desktop-Anwendungen wiederherstellen. Sehen Sie @ Deshmukhs Lösung, wie man das Rad nicht neu erfinden kann. xenoid vor 6 Jahren 0

6 Antworten auf die Frage

17
G-Man

Zunächst einmal verwenden Sie es nicht, $wenn Sie einen Aliasnamen aufrufen.  $dient zum Erweitern einer Variablen (und einigen anderen Dingen, die für diese Frage nicht besonders relevant sind).

Zweitens funktionieren Aliasnamen ein wenig wie Variablen, in dem Sinne, dass sie (mit der Gefahr einer zu geringen Vereinfachung) sich nur zu einer Reihe von Wörtern ausweiten. Sie sagen, Sie möchten das tun myrm foo, aber das würde sich erweitern mv /home/user/Trash/* foo, was keinen Sinn macht.

Eine einfache Lösung wäre, den Alias ​​zu definieren mv -t /home/user/Trash, der funktionieren würde, weil das mvunterstützt

mv -t ziel_dir datei
Syntax als Alternative zum

mv dateizielverzeichnis
Syntax.

Mit einer Shell-Funktion können Sie jedoch flexibler werden. Diese kombinieren die Flexibilität von Skripten mit dem (geringen) Aufwand von Aliasnamen. Zum Beispiel,

myrm() { mv "$@" /home/user/Trash; } 

wird myrm fooals interpretiert mv foo /home/user/Trash.

Ich denke, das "$" stammt von seiner Shell, normalerweise beginnen alle Zeilen in einem Terminal mit "$", um zu sagen, dass es sich um eine nicht-Root-Shell handelt Ferrybig vor 6 Jahren 9
Ja, das könnte das sein, was er meint. G-Man vor 6 Jahren 0
7
deshmukh

Eine wahrscheinlich einfachere Lösung ist die Verwendung des trash-cliPakets. Dann können Sie einfach tun alias myrm=trashund dann trash fooerreichen, was Sie wollen. Nur dass Foo jetzt zu gehen~/. local/share/Trash

4
chloesoe

Das Problem ist, mvman muss es gerne benutzen mv source destination.

Mit Ihrem Alias ​​ist es umgekehrt mv destination source.

*Am Ende benötigen Sie auch kein Sternchen, da es mit dem Ziel als Ordner arbeitet. Stellen Sie sicher, dass Ihr Ordner mit /home/user/Trashexistiert mkdir /home/user/Trash.

Um Ihre Alias-Idee zu lösen, würde ich Ihnen empfehlen, sich die folgenden Stackoverflow-Fragen anzusehen:

Dies wird zu dieser Lösung führen; Bitte füge dies zu deinem hinzu ~/.bashrcund füge einen source ~/.bashrcnach dem Hinzufügen hinzu:

myrm() { /bin/mv "$@" /home/user/Trash/ } 
Die Antwort ist in den Links, ich mag es nicht, die Arbeit anderer Leute zu kopieren chloesoe vor 6 Jahren 0
Ich habe diese Antwort gesehen, als sie hier die einzige war. Wenn es eine explizite Lösung hätte, hätte ich es sofort bestätigt. Ich habe gezögert, aber irgendwann aufgestockt, denn die Links sind nützlich, sie geben Einblick und bleiben in Stack Exchange. Das Hauptproblem bei Link-Only-Antworten besteht darin, dass das verknüpfte Ziel möglicherweise verschwunden ist. Ich gehe jedoch davon aus, dass diese Ziele plötzlich aus dem Internet verschwinden. Kamil Maciorowski vor 6 Jahren 0
fügte die Lösung hinzu und ließ den am besten passenden Link, der andere Link war https://stackoverflow.com/q/4438147/7311363 qft chloesoe vor 6 Jahren 0
2
vera

Wie in Kommentaren angegeben, unterscheidet sich die mvSyntax von Ihnen:

myrm(){ mv "$@" $HOME/Trash/; } 

das kann mehrere Dateien als Argument behandeln

Dieser einfache Alias ​​behandelt jedoch nicht die Namenskollision von Dateien sowie Metadaten (von denen sie entfernt wurden, ...).

Für eine umfassendere Lösung können Sie einfach das Paket verwenden, trash-clidas ziemlich gut ist und mit wenigen Tools geliefert wird (z. B. leere Dateien, die sich für X Tage im Papierkorb befinden, ...).

1
PTRK

There is another useful alias you could consider if you have gvfs-bin package installed in your host:

alias myrm='gvfs-trash` 

It moves your files to the bin. Also, the proper files are written in your $TRASH folder (such as info/, files/ ...). So you don't have to worry for that. Example : Going in the bin and clicking restore will perfectly work.

That's redundant with trash-cli but your host may have only one of them already installed, so if you don't have trash-cli, give it a try.

Ist das besser oder schlechter als das `trash-cli'-Paket? Dies erfordert die Installation von gvfs-bin, das ebenfalls nicht auf meinem System installiert ist. Ich war gvfs noch nie begegnet und habe es unter https://en.wikipedia.org/wiki/GVfs ein wenig gelesen. Ich bin immer noch nicht sicher, was es ist, aber das ist eine andere Frage. Joe vor 6 Jahren 0
Auf dem ganzen System (meistens Ubuntu) war es bereits installiert, weshalb ich es vorschlug; Aber da Sie mir sagen, dass es nicht zwingend ist, ist "trash-cli" möglicherweise nicht besser oder schlechter. Ich werde meine Antwort entsprechend aktualisieren PTRK vor 6 Jahren 1
0
JustAProGamerAndDeveloper

You need to do

mv "$1" /home/user/Trash/
or
mv -t /home/user/Trash/
instead of
mv /home/user/Trash/
Manpage here

Der erste (`mv" $ 1 "/ home / user / Trash /`) funktioniert nicht in einem Alias ​​(worum es sich bei der Frage handelt) und ist in einer Funktion von begrenztem Wert (wie ich bereits in [mein.] Antwort] (https://superuser.com/q/1252676/354511#1252685), `` mv "$ @" / home / user / Trash`` ist besser). Der zweite ("mv -t / home / user / Trash /") war bereits in meiner Antwort und [Cyrus's Kommentar] (https://superuser.com/q/1252676/354511#comment1840104_1252676) davor angegeben. G-Man vor 6 Jahren 0