reponの勉強メモ

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

gem mysql2 のインストールがコケる

$ sudo gem install mysql2 -- --with-cflags=\"-I/usr/local/opt/openssl/include\" --with-ldflags=\"-L/usr/local/opt/openssl/lib\"

via: `ld: library not found for -lssl` after Mac OS Sierra upgrade · Issue #795 · brianmario/mysql2 · GitHub

なお、エラーは以下。

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

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: 予期しないトークン `(' 周辺に構文エラーがあります

findコマンドの"-print0"アクションが、条件を複数にすると表示されないのはなぜ?

以下のようにfindコマンドで検索条件が一つの場合はnull文字を区切りとして正常に表示されるが、

$ find . -name "*.txt" -print0 | xargs -0 echo

以下のように検索条件が複数だと、これを実行しても表示されない。

$find . -name "*.txt" -or -name "*.html" -or "*.tmp" -print0 | xargs -0 echo

何が問題なのだろうか。

find(1)のmanページを見たが、いまいちピンとこなかったのです。