私は初心者です。次のように.bashrcファイルにエイリアスを設定します。
alias myrm='mv /home/user/Trash/*'
目的は、$ myrm fooなどのmyrmコメントを使用する場合、ファイル「foo」をホームフォルダー(/ home/user/Trash)にあるごみ箱フォルダーに移動する必要があることです。
それから私はしました
$source ~/.bashrc
この後、$ myrm fooと入力してmyrmを使用しようとすると、次のエラーメッセージが表示されます。
mv:「/ home/user/Trash/*」を統計できません:そのようなファイルまたはディレクトリはありません
この問題はどのように解決できますか?
まず、エイリアスを呼び出すときに$
を使用しません。 $
は、変数を展開するためのものです(そして、この質問に特に関係のない他のいくつかのもの)。
しかし、第二に、エイリアスは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 foo
はmv foo /home/user/Trash
として解釈されます。
おそらくより簡単な解決策は、trash-cli
パッケージを使用することです。次に、alias myrm=trash
を実行してからtrash foo
を実行するだけで、目的を達成できます。 fooが~/. local/share/Trash
に移動することを除いて
問題は、mv
ではmv source destination
のように使用する必要があることです。
エイリアスを使用すると、その逆になりますmv destination source
。
また、宛先をフォルダーとして使用するため、末尾にアスタリスク*
は必要ありません。フォルダ/home/user/Trash
がmkdir /home/user/Trash
とともに存在することを確認してください。
エイリアスのアイデアを解決するには、このスタックオーバーフローの質問を確認することをお勧めします。
これはその解決策につながります。これを~/.bashrc
に追加し、追加後にsource ~/.bashrc
を実行してください。
myrm() {
/bin/mv "$@" /home/user/Trash/
}
コメントで述べられているように、mv
構文はあなたができることとは異なります:
myrm(){ mv "$@" $HOME/Trash/; }
複数のファイルを引数として処理できる
ただし、この単純なエイリアスは、ファイル名の衝突やメタデータ(削除された場所など)を処理しません。
より完全な解決策としては、パッケージtrash-cli
を使用するだけで済みます。これは非常に優れており、いくつかのツールが付属しています(たとえば、空のファイルがX日間ゴミ箱にあるなど)。
ホストにgvfs-bin
パッケージがインストールされている場合に検討できる、もう1つの便利なエイリアスがあります。
alias myrm='gvfs-trash`
ファイルをビンに移動します。また、適切なファイルが$ TRASHフォルダーに書き込まれます(info/
、files/
...など)。だからあなたはそれを心配する必要はありません。例:ビンに入ってrestore
をクリックすると完全に機能します。
これはtrash-cli
と冗長ですが、ホストにはすでに1つしかインストールされていない可能性があるため、trash-cliがない場合は、試してみてください。