reponの勉強メモ

主に勉強したことのメモです。

findコマンドの "-or" オプションはカッコで括る

複数の検索条件を -or オプションで繋げるとき、以下のように書きがち

$ find . -type f -name *.pdf -or -name *.txt -mtime -3

上記では、 カレントディレクトリの、ファイル名 .pdf か、ファイル名 .txt かつ 最後の修正日が3日前 と、「3日前」が後者の条件「*.txt」にしか掛からない。

-or オプションで列記したい条件はカッコで括る。

$ find . -type f \( -name *.pdf -or -name *.txt \) -mtime -3

これは

$ find . -type f -name *.pdf  -mtime -3 -or -name *.txt -mtime -3

と等価。

カッコにはバックスラッシュをつけること。

以下のようにエラーになる。

$ find . -type f ( -name *.pdf -or -name *.txt ) -mtime -3
-bash: 予期しないトークン `(' 周辺に構文エラーがあります