rm -iを使用して「すべてはい」と言う


10

最初に適切なファイルを削除することを確認したかったので、次のようにしました。

rm -i *

削除するファイルに問題がないことを確認するだけです。だから、これは私に各ファイルを尋ねます。いくつかのファイルを削除した後、それがまさに私が削除したかったことに気付いたとします。歌っCTRL+Cてやるだけでなく、すべての人にrm *はい」とだけ言える方法はありますか?

この質問は、機能よりも好奇心から生じます。


奇妙な質問ですが、とにかく、私たちの答えを創造的にしましょう!
ドルメン2011年

回答:


8

番号。

(デバッガで「インタラクティブ」ビットを反転する方法を見つけない限り。)


[引用が必要] :-)
Daniel Beck

6
@Daniel:coreutils/src/remove.c:335coreutils/lib/yesno.c:46(生成)→ rpmatch(3): "認識された否定応答(" no ")の場合は0、肯定応答(" yes ")の場合は1を
返し

とてもいい発見!
Daniel Beck

3
また、大量のy [改行]をターミナルに貼り付けることもできますが、「すべてはい」ではありませんが、同じことが起こります。
Olli

'y [linebreak]'に当てはまる、好きだよ!:)
Amit

9

まあ、これは本当にあなたの質問に答えません。ただし、を使用する代わりにrm -i、次のエイリアスrmを検討してrm -Iください。

マニュアルページは次のように述べています:

-I     prompt once before removing more than three files, or when removing 
       recursively. Less intrusive than -i, while still giving protection 
       against most mistakes

あなたの中に~/.bashrc、入れて:

 alias rm='rm -I'

これは実際に便利です!


4

すべてに対して「はい」とだけ言う方法はありますか?

答えはイエスです。このコードを使用します。

$ yes "yes" | rm -vRI directory

  • v:削除されたファイルのリストを表示する
  • R:ディレクトリとその内容を再帰的に削除する
  • I:上記の推奨に従って。


3

画面で実行している場合(一般的には良い考え)、次のことができます。

ctrl-a : exec .! yes y

これにより、screenはyを出力として 'yes'コマンドを実行し、その出力を実行中のプログラムに送信します(rm -i)。


2

これは、オンザフライでアプリケーションファイル記述子を置き換えることで実行できます。ただし、中間ファイルが必要になります。

次のようにgdbと名前付きパイプを使用できます(より多くの端末を使用していると仮定すると、それ以外はscreenまたは何かを使用する必要があります)。

  • 「mkfifo myYesYesPipe」で名前付きパイプを作成します
  • rm -iで対話型コピーを開始し、そのPIDを見つけます
  • gdbを開く

次に、PDBを置き換えて、gdbに次のコマンドを入力します。

attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit

これは、キーボードをrmの名前付きパイプに置き換えます。

次に、名前付きパイプを埋める必要があります

  • yes> / path / to / myYesYesPipeを実行します

rmはパイプを読み取り、すべてを上書きします。


@grawity。あなたは私にデバッガーを使うように促しました。
David Costa

1
  1. rmプロセスをバックグラウンドで実行しCtrl+Zます。
  2. 最後のコマンド(rm -i *コマンド)を呼び出す
  3. を削除します -i
  4. Enter コマンドを実行するには
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
user1686 2011年

3
これは、ユーザーがしたくないとユーザーが明示的に述べたものよりどのように優れていますか?
ダニエルベック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.