Linuxで確認なしでrmできない


0

そのため、FooディレクトリにBarというフォルダーがあります。これは、他の場所にある別のフォルダーへのソフトシンボリックリンクです。

私はディレクトリFooにいます。ここで、ビルドフォルダーを再帰的に削除します。

rm -rf Barを実行すると、シンボリックリンクは削除されますが、実際のコンテンツは削除されません。rm -rf Bar / *を実行すると、Barの内容は元の場所から削除されます(これは必要なことです)が、-fオプションをリッスンしません。削除する前に常に確認します。これを回避する方法はありますか?


1
私はちょうどそれをテストし、私のためにGNUを使用してrm、rm やっ従います-f。詳細を入力してください。type rmand の出力は何rm --versionですか?
— ジョン1024 14年

回答:


2

最初:問題を理解します:

$ rm() { /bin/rm --interactive=always "$@"; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
$ rm() { /bin/rm "$@" --interactive=always; }
$ mkdir -p rmtest && touch rmtest/a rmtest/b rmtest/c rmtest/d && rm -rf rmtest
/bin/rm: descend into directory 'rmtest'? y
/bin/rm: remove regular empty file 'rmtest/b'? y
/bin/rm: remove regular empty file 'rmtest/a'? y
/bin/rm: remove regular empty file 'rmtest/d'? y
/bin/rm: remove regular empty file 'rmtest/c'? y
/bin/rm: remove directory 'rmtest'? y

この--interactive=always(または-Iまたは-i)のものは、使用して、少なくとも行うことができます

a)関数
b)通常のラッパースクリプト

ところで:--interactive 引数が最初にあるため、エイリアスを使用して行うことはできません。

この振る舞いを取り除くには、それぞれを確認する必要があります。または、明示的に呼び出すことができますeg /bin/rmまたは/usr/bin/rm

シェル関数rmがあるかどうかを確認します

set | grep "^rm ()"

でそれを取り除く

unset rm

または、最初にインタラクティブな引数を持つように変更して、オーバーライドできるようにします

rm() { /bin/rm --interactive=always "$@"; }

シェルスクリプトを検索します。

which rm

または

type -p rm

それから

file $whatever_path_was_shown

例えば

file /bin/rm

シェルスクリプトの場合

$EDITOR /bin/rm

--interactive引数を前に移動します

ルートアクセス権がない場合は、元のrmを指す関数またはエイリアスを使用してシェルスクリプトを非表示にします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.