web-dev-qa-db-ja.com

ゴミ箱のエイリアスを作成する

私は初心者です。次のように.bashrcファイルにエイリアスを設定します。

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

目的は、$ myrm fooなどのmyrmコメントを使用する場合、ファイル「foo」をホームフォルダー(/ home/user/Trash)にあるごみ箱フォルダーに移動する必要があることです。

それから私はしました

$source ~/.bashrc

この後、$ myrm fooと入力してmyrmを使用しようとすると、次のエラーメッセージが表示されます。

mv:「/ home/user/Trash/*」を統計できません:そのようなファイルまたはディレクトリはありません

この問題はどのように解決できますか?

8
phenomenon

まず、エイリアスを呼び出すときに$を使用しません。 $は、変数を展開するためのものです(そして、この質問に特に関係のない他のいくつかのもの)。

しかし、第二に、エイリアスはwork変数に少し似ています。つまり、エイリアスは(少し単純化しすぎるリスクがありますが)単語の束に拡張されるだけです。 myrm fooを実行したいとおっしゃっていますが、それはmv /home/user/Trash/* fooに拡張され、意味がありません。

簡単な解決策は、エイリアスをmv -t /home/user/Trashに定義することです。これは、mv

mv -t destination_dirファイル
mv ファイル … destination_dir

ただし、シェル関数を使用すると、柔軟性を高めることができます。これらは、スクリプトの柔軟性とエイリアスの(低い)オーバーヘッドを組み合わせたものです。例えば、

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

myrm foomv foo /home/user/Trashとして解釈されます。

おそらくより簡単な解決策は、trash-cliパッケージを使用することです。次に、alias myrm=trashを実行してからtrash fooを実行するだけで、目的を達成できます。 fooが~/. local/share/Trashに移動することを除いて

7
deshmukh

問題は、mvではmv source destinationのように使用する必要があることです。

エイリアスを使用すると、その逆になりますmv destination source

また、宛先をフォルダーとして使用するため、末尾にアスタリスク*は必要ありません。フォルダ/home/user/Trashmkdir /home/user/Trashとともに存在することを確認してください。

エイリアスのアイデアを解決するには、このスタックオーバーフローの質問を確認することをお勧めします。

これはその解決策につながります。これを~/.bashrcに追加し、追加後にsource ~/.bashrcを実行してください。

myrm() {
 /bin/mv "$@" /home/user/Trash/
}
4
chloesoe

コメントで述べられているように、mv構文はあなたができることとは異なります:

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

複数のファイルを引数として処理できる

ただし、この単純なエイリアスは、ファイル名の衝突やメタデータ(削除された場所など)を処理しません。

より完全な解決策としては、パッケージtrash-cliを使用するだけで済みます。これは非常に優れており、いくつかのツールが付属しています(たとえば、空のファイルがX日間ゴミ箱にあるなど)。

2
vera

ホストにgvfs-binパッケージがインストールされている場合に検討できる、もう1つの便利なエイリアスがあります。

alias myrm='gvfs-trash`

ファイルをビンに移動します。また、適切なファイルが$ TRASHフォルダーに書き込まれます(info/files/ ...など)。だからあなたはそれを心配する必要はありません。例:ビンに入ってrestoreをクリックすると完全に機能します。

これはtrash-cliと冗長ですが、ホストにはすでに1つしかインストールされていない可能性があるため、trash-cliがない場合は、試してみてください。

1
PTRK