保護されたファイルを削除するときに「y」を何度も発行する必要を回避する方法


52

「rm:書き込み保護された通常ファイル[x]を削除しますか?」に対する応答として使用されるソリューションを探しています。

私は、bashrcで文字を発行し、その後何回かキャリッジリターンを行うことを考えていました。どうすればいいですか?


関数を定義できます。このthradはあなたを助けるかもしれない:stackoverflow.com/questions/756756/...を
アルパート

なぜこれをしたいのですか?いずれの場合でも、.bashrcでキャリッジリターン(改行ではなく)を印刷することは、非常に明白なタスクです。
l0b0

@ l0b0質問をより具体的に編集
Iancovici

なぜ.bashrcのファイルを削除したいのですか?元のタスクはまだ明確ではありません。
l0b0

3
@echadromani SO / SEでは、元の問題を理解して、他の状況に適用できる最適なソリューションを提供しようとすることが非常に一般的です。
-l0b0

回答:


75

更新された質問に基づいて編集:

ファイルの削除についての質問を回避するには、-f( "force")オプションを追加します。

rm -f /path/to/file

これには、注意が必要な副作用が1つあります。指定されたパスのいずれかが存在しない場合、これは報告され、正常に戻ります。

$ rm -f /nonexistent/path
$ echo $?
0

元の回答:

簡単なソリューションを次に示します。

yes "$string" | head -n $number | tr $'\n' $'\r'

yes改行で区切られた文字列を無限に繰り返します。head後に、それを停止$number時間、およびtrキャリッジリターンに改行を変換します。キャリッジリターンが原因で出力が表示されない場合がありますが、このコマンド(bash)に出力を渡すと、次のようになります。

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

を持たないユーザーbashは、結果をodにパイプしhexdumpたりxxd、実際に返される文字を確認したりできます。


7

私が時々遭遇する他の問題は、/ etc / bashrcでにrmエイリアスされていることですrm -i

alias rm='rm -i'

その場合unalias rm、私は何年も前に見つけたこのトリックを使用するか、使用することができます。エイリアスされたコマンドの前にバックスラッシュを置き、そのエイリアスを一度だけ無視します:

\rm somefile

エイリアスの詳細については、Nixcraftの記事をご覧ください


5

rm書き込み保護されたファイルについて「対話的に」(ユーザー入力を待機するプロンプト)を要求するようにハードコードされています。rm質問を防ぐための2つの方法があります。

rm -rf somedir

そして

rm -r --interactive=never somedir

(両方とも-rdirsの代わりにファイルを削除するときにも動作します)

説明:

-fMAKES rm「プロンプト、存在しないファイルと引数を決して無視しない」にします。

--interactive=neverそれが言うことをします:決してインタラクティブではありません。言い換えると、プロンプトは表示されません。

違い-fとは--interactive=never「存在しないファイルと引数を無視する」:この部分です。

比較する:

$ rm -rf nonexistingname
$ echo $?
0

そして

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

違いは主rmに、インタラクティブになりたくないがエラーを処理したいスクリプトを書くときに興味深いものです。

概要:コマンドラインで使用しますrm -rf。スクリプトで使用しますrm -r --interactive=never


回答については、記載されている質問(「保護されたファイルを削除するときに「y」を数回発行する必要を回避する方法)」を参照してくださいhttps://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860#338860


1

すべてのコマンドにyesを指定するだけです!

yes | rm -r /path/
yes | <command>

とにかく、いつでも強制的に使用できます-f

rm -r -f /path

-2

私も同じ問題に遭遇しました。上記の答えは1つのファイルに対するものですが、多くのyesを無視したい場合です。

使用できます

sudo rm -r /path/to/directory

すべての書き込み保護された通常ファイルを削除する


これはディレクトリ全体を削除するため、ダウン投票されています。おそらくOPは、同じディレクトリサブツリー内のすべてのファイルではなく、問題のファイルのみを削除することを望んでいます。
ジェイク

ちょっと....あなたは正しいかもしれません。
ゴパルプラサド

ちょっと....あなたは正しいかもしれません。しかし、この場合はそうではありません。ユーザーが多くの忍耐と時間を持っているかのように、彼はまた「はい」を数回与える時間もあります...私は彼が1つのコマンドですべてのファイルを削除したいと思いました..保護されたファイルは、このタイプのファイルを削除する前に必ず確認を求めます。そのような例の1つは、virtualenvを作成し、後でpythonで削除する場合です。それを試してみてください。答えを提供する必要があります。このようにして状況を解決しました。
ゴパル・プラサード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.