父は、論文がほぼ完成し、飛行機でデンマークに飛んで友人と話し合っていた同僚の話をしてくれました。彼は自分のコンピューターで遊んでいて、「*。tex」という名前のファイルを作成していました。フライトが終わりに近づいたとき、彼はファイルを削除したかったので、彼はUnixに話しrm -rf '*.tex'
、誤って論文を削除しました。名前の付いたファイルを作成しない以外に、これを回避するにはどうすればよい*
ですか?
5 に答える
前に「\」を追加して、「*」をエスケープするだけです。rm \*.tex
完璧に動作します。また、rm -rf
自分が何をしているのか本当に確信が持てない限り、何もしないでください。
rとfは、[r]ecursiveと[f]orcedを表します。つまり、そのコマンドでディレクトリをターゲットにすると、ツリーの最後まで、そのディレクトリ、そのすべてのファイル、すべてのサブディレクトリとそのすべてのファイルなどが即座に取り返しのつかないほど削除されます。
正しく一重引用符で囲むだけです。自分でこれを試してください:
$ mkdir tmp
$ cd tmp
# Create a file named '*.tex', containing the string 'foo'
$ echo 'foo' > '*.tex'
# Create a file named 'bar.tex', containing the string 'bar'
$ echo 'bar' > 'bar.tex'
$ ls
$ rm '*.tex'
$ ls
rm -i \*.tex
は-i
インタラクティブ用です。削除された各ファイルに対して「はい」または「いいえ」と言うことができます。のアンチテーゼです-rf
。*.tex
バックスラッシュは星が展開されるのを防ぎthesis.tex
ます。名前の前後に引用符を使用できます — この場合、一重引用符または二重引用符が機能します。特殊文字がバックティックまたはドル記号の場合は、一重引用符が必要です。
どのファイル名が削除されるか少しでも心配な場合は、インタラクティブ モードを使用すると便利です。を使用する場合はrm -fr
、希望どおりに動作することを確認する必要があります (正しいディレクトリにいる場合、ワイルドカードは期待どおりに動作します)。実行時に root としてログインしている場合は、return を押す前に立ち止まってよく考える必要があります。間違いは致命的です。
また、論文がバージョン管理されておらず、バックアップもされていなかった場合、同僚は危険な生活を送っていたこともわかります。重要な場合は、バックアップします (可能な場合はバージョン管理下に置きます)。
ファイルシステムの人的エラーまたはハードウェア/ソフトウェア障害による損傷を軽減する通常の方法は、信頼性の高いバックアッププロセスを実施することです。
ただし、飛行機の飛行中にバックアップを実行することは特に実用的ではありませんが、軽量スナップショットをサポートするZFSやbtrfsなどのコピーオンライトファイルシステムがますます普及しているため、デーモンが定期的なスナップショットを処理することで、論文を保存できたはずです。
逸話の最後の質問は、「どうすればこれを回避できるか」でした。
誤ってファイルを削除したくない場合は、次のようにrm
コマンドに別名を付けることができます (この行を起動スクリプトに追加します)。
alias rm='rm -i'
これにより、ファイルを削除するたびに「よろしいですか?」と尋ねられます。
もちろん、「*」のエスケープに関する他のすべての回答は有効ですが、これは「確実にすべてをキャッチする」トリックです。
シェルが異なれば、構文もわずかに異なります。必要なものを確認してください...