LoginSignup
0
0

More than 1 year has passed since last update.

`pbcopy > hoge.txt` でファイルの中身を吹っ飛ばした

Posted at

これはなに?

ファイルの中身をコピーしようと思って pbcopy コマンドを使ったら、ファイルの中身を全て削除してしまったので、自戒の記事。
復元方法ではなく、再発防止策について書いていく。

ちなみに、事前にバックアップをとっていれば復元可能なケースもあるようですが、そんなものは用意していなかったので、復元方法はなさそう。
もしあるのならば知りたい。。。

環境

  • macOS Monterey: v12.5.1
  • zsh

やらかした内容

hoge.txt の内容をコピペしたい。

# まずはファイルの中身を確認する
$ cat hoge.txt
hoge
fuga
piyo

# 中身ヨシ👉
# `pbcopy` コマンドで中身コピー実行!

$ pbcopy > hoge.txt

# コマンド打ったらなかなか終わらないし、対話モードっぽいのに入ったからコマンド間違えたかな?
# とりあえず `⌃ C` で一回実行止めればヨシ👉(よくない)
^C
$ 
# リダイレクト `>` の向き先が逆だった……
# コマンド再実行!
$ pbcopy < hoge.txt

途中でコマンド間違えたけど、再実行したし ⌘ + v でペーストしてみるか!
……できない。

ファイルの中身も入っていたはずなのになぜ??
一応もう一回ファイルの中身確認しとくか……

$ cat hoge.txt

何も表示されない。
オワリ。

何が起こったか

まず、本来の「 hoge.txt の中身をクリップボードに書き込む」という目的を達成するのに適切なコマンドは下記だった。

$ pbcopy < hoge.txt

しかし、1回目コマンドでは上記とリダイレクト > の向き先が真逆だったため、
「無」を hoge.txt ファイルの中身に上書きされてしまったらしい。(※)
結果として、1回目コマンド実行した時点で hoge.txt の中身は全て吹っ飛んで空のファイルが出来上がり、
2回目に正しいコマンド実行しても空の内容がクリップボードにコピーされてしまった次第。

※補足
pbcopy > hoge.txt の正確な動作がどのようなものか、までは調べきれてない。
クリップボードの中身がファイルに書き込まれるのかなと思ったけど、そんなことはなかった。

再発防止策

というわけで、ここから本題。

そもそも今回のやらかし原因は、shellやリダイレクト > の知識不足というのもあるが、今後も誤操作する可能性は十分にある事象。
ということで、shell利用時に想定外にファイルの中身を上書きしてしまう危険性を排除するための対策を施す。

具体的には .zshrc に以下を追記。

.zshrc
set -o noclobber

参考記事は下記。

対策できたか試してみる。

.zshrc の内容を反映するために、ターミナル再起動もしくは source .zshrc を実行済みの状態。

# `hoge.txt` の中身を確認する
$ cat hoge.txt 
hoge
fuga
piyo

# 間違えたコマンドを実行してみる
$ pbcopy > hoge.txt
zsh: file exists: hoge.txt

# `hoge.txt` の中身を確認する
$ cat hoge.txt     
hoge
fuga
piyo

しっかり上書きが防止されている。
めでたしめでたし。(※)

※ちなみに、実際に吹っ飛ばした時に操作していたのはtxtファイルではなく、秘密鍵でした。
何もめでたくない。
オワリ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0