私は多くの端末作業を行っており、今日はタイピングの経験がありました
rm fileInQuestion.txt
実際にfileInQuestion.txtが必要だったことを知る前に。GUIで削除した場合は、ごみ箱から取り出しただけです。ターミナルで「rm」をオーバーロードすることが可能かどうかを知りたいのですが、途中でファイルをゴミ箱に送信します。
私は多くの端末作業を行っており、今日はタイピングの経験がありました
rm fileInQuestion.txt
実際にfileInQuestion.txtが必要だったことを知る前に。GUIで削除した場合は、ごみ箱から取り出しただけです。ターミナルで「rm」をオーバーロードすることが可能かどうかを知りたいのですが、途中でファイルをゴミ箱に送信します。
回答:
私はエイリアシング助言しませんrm
しmv
、あなたが習慣になるかもしれないとrm
永久にファイルを削除していないし、それはときに、他のコンピュータ上またはその他のユーザーアカウントの下で問題に遭遇しない永久に削除します。
最も重要bash
なのopen
はpbcopy
、Mac OS Xに似たコマンドラインツールを追加する一連のスクリプト(およびpbpaste
、などの組み込みツールに加えて)を記述したことtrash
です。私のバージョンはtrash
、エイリアスrm
ができないすべての正しいことを行います(そして、うまくいけば悪いことはありませんが、データを失うことなく数年間自分のMacで使用しています)、Finderのようにファイルの名前を変更する同じ名前のファイルが既に存在する場合、外部ボリューム上の正しいゴミ箱フォルダーにファイルを入れます。また、利用可能なときにAppleScriptを使用しようとするため、素敵なゴミの音などが得られます(ただし、ユーザーがログインしていないときにSSH経由で使用できるようにする必要はありません)。すべてのボリュームでゴミ箱のサイズを指定します。
私のサイトからtools-osxスイートを、またはGitHubリポジトリから最新かつ最高のバージョンを入手できます。
Ali Rantakariによって開発されたtrash
コマンドもありますが、私はそれを自分でテストしていません。
trash
かなり長い間ランタカリで使用してきましたが、本当にそれを保証できます。Objective-Cでコンパイルされ、標準のファイルシステムAPIを巧みに使用します。失敗した場合(つまり、ユーザーに十分な権限がない場合)、Finderを呼び出してファイルを破棄します(効果的に認証を要求します)。詳細についてはtrash
、hasseg.org / blogをご覧ください。
brew install trash
。
brew remove trash
からエラーを修正することができましたbrew install trash
。
ゴミのコマンドラインツールを介してインストールすることができますbrew install trash
。
コマンドラインまたはFinderを使用して、ごみ箱に入れたファイルを復元できます。
port install trash
brew install trash
:、私はこの取得pastebin.com/N92cM7d8
brew update
最初の?私の側でうまくいく。
私のrem
どこかに$PATH
次の内容の実行可能ファイルがあります:
編集:以下のコードは、Dave Abrahamsと共同で改訂および改善されたバージョンです。
#!/usr/bin/env python
import os
import sys
import subprocess
if len(sys.argv) > 1:
files = []
for arg in sys.argv[1:]:
if os.path.exists(arg):
p = os.path.abspath(arg).replace('\\', '\\\\').replace('"', '\\"')
files.append('the POSIX file "' + p + '"')
else:
sys.stderr.write(
"%s: %s: No such file or directory\n" % (sys.argv[0], arg))
if len(files) > 0:
cmd = ['osascript', '-e',
'tell app "Finder" to move {' + ', '.join(files) + '} to trash']
r = subprocess.call(cmd, stdout=open(os.devnull, 'w'))
sys.exit(r if len(files) == len(sys.argv[1:]) else 1)
else:
sys.stderr.write(
'usage: %s file(s)\n'
' move file(s) to Trash\n' % os.path.basename(sys.argv[0]))
sys.exit(64) # matches what rm does on my system
Finderから削除するのとまったく同じように動作します。(こちらのブログ投稿をご覧ください。)
~/bin
に名前を付けてtrash
初めて使いました。Finderウィンドウでクリックするよりもずっと効率的に大量のファイルをゴミ箱に捨てることができました。感謝します。もっと回答を投稿してください!
ユーザーのバッチプロファイルの最後に追加でき、rm
実行するたびにファイルをゴミ箱に移動させる非常に素晴らしいコードを見つけました。
nano〜/ .bash_profile
#... append at the end
function rm () {
local path
for path in "$@"; do
# ignore any arguments
if [[ "$path" = -* ]]; then :
else
# remove trailing slash
local mindtrailingslash=${path%/}
# remove preceding directory path
local dst=${mindtrailingslash##*/}
# append the time if necessary
while [ -e ~/.Trash/"$dst" ]; do
dst="`expr "$dst" : '\(.*\)\.[^.]*'` `date +%H-%M-%S`.`expr "$dst" : '.*\.\([^.]*\)'`"
done
mv "$path" ~/.Trash/"$dst"
fi
done
}
ソース:http : //hints.macworld.com/article.php?story=20080224175659423
local dst=${path##*/}
とlocal dst=${mindtrailingslash##*/}
だけ言って、1つの前に別の行を挿入しますlocal mindtrailingslash=${path%/}
。②私は名前を使用しますfunction rr
。このように、それはplainと干渉しませんrm
が、名前は同様に短くて速く入力できます(他の名前でもかまいません)。
rm()
をrmt()
-に変更するとrm
、必要なときにコマンドを使用できます。私は私の頭の中のremove to trash
AppleScriptインタープリターである端末コマンドosascriptを使用します。
osascript -e "tell application \"Finder\" to delete POSIX file \"${PWD}/${InputFile}\""
これにより、AppleScriptはFinderにファイルをゴミ箱に送るように指示します。
AppleScriptでは適切に処理されないため、相対ファイルパスにはPWDが必要です。
迅速を使用した最新のアプローチ
https://github.com/reklis/recycle
//
// main.swift
// recycle
//
// usage: recycle <files or directories to throw out>
//
import Foundation
import AppKit
var args = NSProcessInfo.processInfo().arguments
args.removeAtIndex(0) // first item in list is the program itself
var w = NSWorkspace.sharedWorkspace()
var fm = NSFileManager.defaultManager()
for arg in args {
let path = arg.stringByStandardizingPath;
let file = path.lastPathComponent
let source = path.stringByDeletingLastPathComponent
w.performFileOperation(NSWorkspaceRecycleOperation,
source:source,
destination: "",
files: [file],
tag: nil)
}
rm
ファイルを削除する代わりにゴミ箱に移動することは可能ですが、グラフィカルユーザーインターフェイスのセーフティネットの考え方をUNIXシェルに持ち込むことはお勧めしません。ターミナルを使用して深刻な損害を与える方法はたくさんあります。IMHOの最善のアドバイスenterは、シェルウィンドウでキーを押す前に2回考えることです。
rm
ファイルを削除しようとしていることを思い出したい場合は、次のエイリアスを使用することを検討してください(ホームディレクトリ/bin/bash
にこの行を入れるため.bashrc
):
alias rm "rm -i"
これrm
により、各ファイルを削除する前に要求の確認が行われます。
TimeMachineを実行している場合(そう願っています!)、いつでもバックアップからファイルを取得できます。この方法では、せいぜい1時間の仕事しか失うことができません。もちろん、これで十分です。そのため、そのenterキーを押す前にもう一度考えてください!
rm
、エイリアスを使用してハングする場合がありますrm -i
。
rm
、他のシステムで問題が発生するよりも安全な脳を訓練することです。また、を使用すると-f
、-i
完全に無視されます。とはいえ、これは優れたセーフティネットです。より良い方法rm
は、rmi
エイリアス(alias rmi="rm -i"
)または優れたtrash
ユーティリティを優先して使用しないことです。また、私は誰もが今までに入れ[ -f ~/.bashrc ] && source ~/.bashrc
ておくべきだったと付け加えます.bash_profile
。
これを実現できるHomebrewを介してインストール可能な2つのユーティリティがあります。
これは、ファイルまたはフォルダーをごみ箱に移動するOS X用の小さなコマンドラインプログラムです。このコマンドのUSPを使用すると、ファイルを簡単に復元できます。ファイル/フォルダーをゴミ箱に移動した後、ファイル/フォルダーを復元できない場合は、コマンドを使用しても意味がありません。コマンドのWebサイトから:
既定では、ゴミ箱は、Finderを使用してファイルをゴミ箱に移動するときにのみ機能する「プットバック」機能により、システムAPIを呼び出す代わりに、指定されたファイル/フォルダをゴミ箱に移動するようにFinderに要求します。
-F
システムAPIを使用する代わりに、Finderにファイルをゴミ箱に移動するよう依頼してください。これは遅くなりますが、FinderのUI(サウンドなど)を利用し、「プットバック」機能が確実に機能するようにします。
-l
現在ゴミ箱にあるアイテムをリストします。この引数を使用する場合、ファイルを指定する必要はありません。
-e
ゴミ箱を空にします。ゴミ箱はこのアクションを実行する前に確認を求めます。この引数を使用する場合、ファイルを指定する必要はありません。
インストールtrash
するには、ターミナルで次を実行します。
brew install trash
。
ファイルをゴミ箱に移動するコマンドラインツール。コマンドのmanページから:
このコマンドは、ファイルをファイルシステムから完全に削除するのではなく、ごみ箱に移動します。あなたが結局そのファイルが欲しいと決めるなら非常に便利です...
-uユーザー名
オプションの引数。これにより、指定したユーザーのゴミ箱にファイルが移動します。これを行うには十分な権限が必要であることに注意してください。
インストールrmtrash
するには、ターミナルで次を実行します。
brew install rmtrash
。
これは、bashプロファイルに追加する非常に簡単な1行のソリューションです。既にゴミ箱にある同じ名前の何かを上書きすることに注意してください。
trash() { mv -fv "$@" ~/.Trash/ ; }
使用法:
• ~/Desktop $$$ touch a b c
• ~/Desktop $$$ ls
a b c
• ~/Desktop $$$ trash a b c
a -> /Users/ryan.tuck/.Trash/a
b -> /Users/ryan.tuck/.Trash/b
c -> /Users/ryan.tuck/.Trash/c
• ~/Desktop $$$ ls
• ~/Desktop $$$
.bashrc(またはシェルのパラメーターを保持する場所)で、次のようにrmの動作を〜/ .Trashに移動するように変更するエイリアスを追加してみてください:
alias rm='move/to/.Trash'
ただし、mv(この仕事に使用する主要な候補)の使用は
mv file where
したがって、移動するファイルの前に「where」部分を配置するエイリアスがあると、かなり大ざっぱになります。より詳細なアドバイスが得られるかもしれません。
編集:私はちょうど.bashrcに次を追加しようとしましたが、それは動作します:
function trash { mv "$@" ~/.Trash ; }
他の提案よりもはるかに原始的ですが、新しいもののインストールは避けてください。
rm
インストーラースクリプトを壊す可能性があるため、エイリアスを作成すると危険です。エイリアスrm
を作成rm -i
してインストールがハングしたとき、私はこれを難しい方法で学びました。
.bashrc
のみ使用されます。新しいプロセスを実行すると、プロセスが開始され、エイリアスはアクティブになりません。ただし、現在のプロセスを実行すると、インストーラーが実行され、エイリアスがアクティブになります。RTFM ..../install.sh
. install.sh
rm
ます。rm
実際にファイルを削除しないことに慣れると、そのようなエイリアスが追加されていないシステムで何かを誤って削除する可能性があるためです。また、ファイルをごみ箱に移動するのは簡単なことではありませんmv {} ~/.Trash
。たとえば、ファイルが別のボリュームにある場合、これによりファイルがホームディレクトリにコピーされ、元のファイルが削除されます。
私は単にこのスクリプトを入れました
#!/bin/bash
application=$(basename "$0")
if [ "$#" == 0 ]; then
echo "Usage: $application path [paths...]"
exit 1
fi
trashdir="/Users/${USER}/.Trash"
while (( "$#" )); do
if [ -e "$1" ]; then
src=$(basename "$1")
dst=$src
while [ -e "$trashdir/$dst" ]; do
dst=$src+`date +%H-%M-%S`
done
mv -f "$1" "$trashdir/$dst"
else
echo "$1" does not exist.
fi
shift
done
で~/bin/trash
、実行可能chmod +x ~/bin/trash
にし、次の行を追加しました~/.bash_profile
PATH=$PATH:$HOME/bin
その後、次のように使用できます
$ trash broken.js olddir cleanup.*
単純な関数を使用すると、ファイルをユーザーの.Trashフォルダーに移動してゴミ箱に入れることができます。
trash() {
mv $1 ~/.Trash
}
$*
代わりにが必要に$1
なりますが、そうすると同じ答えになりmv "$@" ~/.Trash
ます。なぜ人々が反対票を投じるのか、他の答えからのコメントをチェックしてください。