TVアニメ『Re:ゼロから始める異世界生活』のEDテーマです。神秘的な音楽が本作に合っています。アニメの内容はタイトルのままでゼロから始めるってのをRe:します。せっかく運良く勝ち取ったように見えた人間関係も全部消えて一から築き直し。それが続くのに凹むどころか、もっと良くしようと頑張る主人公。ストーリーがマンネリになってきたなあと思ったら、すぐに急展開で面白くなって、を繰り返します。
今回のテーマはrmコマンドですが、いっそのことPCの中身をすべてrmしてしまって、一から構築し直せば、もっと効率的な仕事ができるようになるかもしれません。しかし、たとえ生産性が手に入れられるとしても、rmする勇気は私にはないです。
(Linux入門はコチラ→中級者のためのLinuxコマンド入門)
ワイルドカードと一緒に使うことの多いrmコマンドですが、毎度のようにコマンドを実行するときに、本当に消して良いものか不安になります。
rm *.bkと実行しようとして、 rm *まで入力した時、何かの拍子にEnterを押してしまい、ディレクトリ内のすべてのファイルが消えてしまう、というような事故は起こらないようにしたいですね。 大事なファイルはバージョン管理するので、大丈夫ではありますが。
rm の削除時に確認をしたいときは、-i、-Iオプションが使えます。まずは実験用に適当なファイルを生成します。
~$ touch {1..10} a{1..10} {1..10}b ~$ ls 1 10b 2 3 4 5 6 7 8 9 a1 a2 a4 a6 a8 10 1b 2b 3b 4b 5b 6b 7b 8b 9b a10 a3 a5 a7 a9 ~$
rm -i を使います。確認メッセージに対して、Enterだけの入力ではファイルは削除されません。
~$ rm -i * rm: 通常の空ファイル `1' を削除しますか? rm: 通常の空ファイル `10' を削除しますか? rm: 通常の空ファイル `10b' を削除しますか? rm: 通常の空ファイル `1b' を削除しますか? ^C ~$ rm -i * rm: 通常の空ファイル `1' を削除しますか? rm: 通常の空ファイル `10' を削除しますか? rm: 通常の空ファイル `10b' を削除しますか? rm: 通常の空ファイル `1b' を削除しますか? (省略)
下のように、最初の一文字がyまたはYの時に、削除されます。
Thank youでは、消してくれないのに、You’re kiddingは消されてしまいますので、注意が必要です。
~$ rm -i * rm: 通常の空ファイル `1' を削除しますか? y rm: 通常の空ファイル `10' を削除しますか? Y rm: 通常の空ファイル `10b' を削除しますか? yes rm: 通常の空ファイル `1b' を削除しますか? yeah rm: 通常の空ファイル `2' を削除しますか? yap rm: 通常の空ファイル `2b' を削除しますか? ya rm: 通常の空ファイル `3' を削除しますか? yoshi rm: 通常の空ファイル `3b' を削除しますか? yummy rm: 通常の空ファイル `4' を削除しますか? yuck rm: 通常の空ファイル `4b' を削除しますか? You're kidding rm: 通常の空ファイル `5' を削除しますか? Thank you rm: 通常の空ファイル `5b' を削除しますか? ^C ~$ rm -i * rm: 通常の空ファイル `5' を削除しますか? rm: 通常の空ファイル `5b' を削除しますか?
-iではファイル一つずつに対して削除確認されましたが、-Iにするとまとめての確認となります。こちらに関しても、削除確認の際にEnterだけでは削除されず、yもしくはYにてまとめて削除ができます。
~$ rm * ~$ touch {1..10} a{1..10} {1..10}b ~$ rm -I * rm: remove 30 arguments? ~$ ls 1 10b 2 3 4 5 6 7 8 9 a1 a2 a4 a6 a8 10 1b 2b 3b 4b 5b 6b 7b 8b 9b a10 a3 a5 a7 a9 ~$ rm -I * rm: remove 30 arguments? y ~$ ls ~$
次は特定のファイルの削除をしてみましょう。実験用ファイルを再度作成します。
~$ rm * ~$ touch {1..10} a{1..10} {1..10}b
今、以下の3種のファイルが存在します。
・aから始まるファイル
・bで終わるファイル
・それ以外の数字だけで構成されるファイル
順に消して行きましょう。まずは、aから始まるファイルから
~$ rm -I a* rm: remove 10 arguments? y ~$ ls 1 10 10b 1b 2 2b 3 3b 4 4b 5 5b 6 6b 7 7b 8 8b 9 9b ~$
次は、1b〜5bを消します。
~$ rm -I {1..5}b rm: remove 5 arguments? y ~$ ls 1 10 10b 2 3 4 5 6 6b 7 7b 8 8b 9 9b ~$
次は、6〜9が付く名前のファイル(6〜9、6b〜9b)を消します。
~$ rm -I {6..9}* rm: remove 8 arguments? y ~$ ls 1 10 10b 2 3 4 5 ~$
{A..B}等グロブを使えば、規則正しいファイル名の場合は削除できる気はするのですが、複雑なファイル名に対応できる気がしません。
ファイル名が複雑な場合、どのように削除すれば良いでしょうか。
複雑なファイルをランダムに作ってみます。
~$ shuf /usr/share/dict/words | head -20 | sed s/\'// | xargs touch ~$ for i in `seq 20`;do touch $RANDOM;done ~$ ls 12874 18894 28545 6975 altimeters downer sloughing 13908 20472 30055 7542 baffle gangs spending 1455 21891 30508 Americanisms celestas obsidians sullennesss 16186 21905 31379 Amys chaperones particulates vulcanization 16710 21969 4904 Hibernia daybreak rabbis 18735 24431 5167 Rosemarie dictums ribald ~$
このランダムなファイル名の中から、数字だけで構成されるファイルを削除してみましょう。
正規表現を使います。
~$ rename 's/^(\d+)$/$1.del/' * ~$ ls 12874.del 20472.del 30508.del Amys daybreak ribald 13908.del 21891.del 31379.del Hibernia dictums sloughing 1455.del 21905.del 4904.del Rosemarie downer spending 16186.del 21969.del 5167.del altimeters gangs sullennesss 16710.del 24431.del 6975.del baffle obsidians vulcanization 18735.del 28545.del 7542.del celestas particulates 18894.del 30055.del Americanisms chaperones rabbis ~$ rm -I *.del rm: remove 20 arguments? y ~$ ls Americanisms altimeters daybreak obsidians sloughing Amys baffle dictums particulates spending Hibernia celestas downer rabbis sullennesss Rosemarie chaperones gangs ribald vulcanization ~$
正規表現を使って、renameコマンドで一旦ファイル名を変更した後に、rmで削除を行ないました。
rmが正規表現が使えなくて不便なら、renameを使えば良いってことですね。
コメント