find -printオプションとは?初心者でも理解できるLinux検索結果の出力方法
生徒
「先生、findコマンドを使うと勝手にファイルの一覧が表示されますよね?」
先生
「そのとおりです。実はそれ、内部的には-printというオプションが働いているんですよ。」
生徒
「えっ、そんなの指定した覚えないのに、勝手に出てくるんですか?」
先生
「はい、実は-printはデフォルトで有効になっているんです。でも明示的に書くこともできますよ。」
1. find -printオプションとは?
findコマンドは、Linuxでファイルやディレクトリを検索するために使う基本的なコマンドです。その際、見つけたファイルのパスを出力(画面に表示)するために使われるのが-printオプションです。
実はこの-printは、明示的に書かなくても自動的に有効になっています。ですが、他の処理と組み合わせる場合や、意図を明確にしたいときに-printを明示的に記述すると便利です。
2. 実際にfindコマンドを使ってみよう
カレントディレクトリ(現在いる場所)からすべてのファイルとフォルダを探して表示する基本的なコマンドは以下のとおりです。
find .
./
./test.txt
./sample
./sample/data.log
このように、findだけでもちゃんとファイルが出力されます。実はこの裏で-printが働いています。
3. 明示的に-printを使うとどうなる?
試しに、同じ検索を-printを明示的に書いて実行してみましょう。
find . -print
./
./test.txt
./sample
./sample/data.log
結果は全く同じですが、-printを明示することで意図がはっきりと伝わるというメリットがあります。特に複雑な条件や他の処理と組み合わせるときに、読みやすさが向上します。
4. 他のオプションとの組み合わせ例
たとえば、名前に「log」が含まれるファイルだけを検索して出力したい場合、以下のように書くことができます。
find . -name "*log*" -print
./sample/data.log
-printがあることで、検索結果をちゃんと画面に表示してくれるわけです。もしこの-printを省略して、別のアクションを指定しないと、何も表示されないこともあります。
5. -printを省略しても動く場合と動かない場合
実は、-printを省略しても、検索結果は表示されることが多いです。しかし、次のように複数の条件を組み合わせているときには、結果が表示されないことがあります。
find . -name "*.txt" -type f
このように条件だけ指定していると、何も出力されません。これを解決するために、明示的に-printを入れると、確実に結果が見られます。
find . -name "*.txt" -type f -print
./test.txt
6. -printと他のアクションの違い
-printは検索結果を表示するだけですが、-execや-deleteなどの他のアクションと同時に使うことで、より明確に動作内容を確認できます。
find . -name "*.log" -print -exec rm {} \;
./sample/data.log
このように-printを入れておくと、削除する前に表示もしてくれるので安心です。
7. -print0との違い
似た名前の-print0というオプションもあります。これは、出力の区切り文字を改行ではなく「NULL文字」にするためのものです。
スペースや改行が含まれるファイル名を安全に扱う場面で使います。例としてはxargs -0とセットで使うことが多いです。
find . -type f -print0 | xargs -0 rm
ただし、初心者のうちはまず-printだけをしっかり覚えておけば問題ありません。
8. sudoやrootでの実行も同じ
-printオプションは、管理者権限(root)で実行するときでも同じように使えます。例えば、ログディレクトリを調べたい場合は次のようになります。
find /var/log -name "*.log" -print
/var/log/syslog.log
/var/log/kern.log
このように、検索結果を画面に出力して確認できるので、他の処理と組み合わせる前に状況を把握できます。