問題4:特定のファイルの削除
ファイル内に10と書かれたファイルのみ削除する。
準備
まずファイル内に数字を書き込んだファイルを1000個作る。
$ seq 1000 | sed 's/^/echo $RANDOM > /' | bash
- $RANDOM : Bashの変数(第2章で扱うらしい)
- echo $RANDOM > : この後に1~1000までの数字が来て、それをファイル名にしたファイルができ、中に$RANDOMの数字が書き込まれる。
なぜこれだけでファイルができるか理解するのにちょっと時間がかかったが、リダイレクトしているからだ。「$ echo "HELLO" > test.txt」で、中に"HELLO"と書かれたtest.txtができるのと同じ。
正答
$ grep -l '^10$' -R | xargs rm
上記の解答では、Rオプションがないから処理が終わらなかったと思う(理由はわからない。ファイル数がそこまで多いわけじゃないので、Rオプションなしでもそれほど時間がかからなそうな気がするんだけど......)。
→ 2023.01.05追記:処理が終わらなかった理由について、カツニャリ (id:papiro)さんにコメントでご教示いただきました。ありがとうございました!
Rオプションなしで明示的にカレントディレクトリ以下の全ディレクトリを指定しても処理できた(参考サイト参照)。
$ grep -l '^10$' * | xargs rm