find -print0

tech

いまどきはUNIXといえどファイル名にどんな文字が入ってるかわからないから
find . -print0 | xargs -0 もげ
だよね普通。
という話で。

find . -uid 100 -print0 | xargs -n 50 -0 chown 101.101

とかやって、特定のユーザIDのファイルを別の人のにchownしていたわけだが。

うっかり

find . -print0 -uid 100 | xargs -n 50 -0 chown betty.betty

としてしまい。


-print0
This primary always evaluates to true.  It prints the pathname of
the current file to standard output, followed by an ASCII NUL
character (character code 0).

なので、つまり-print0は常に真なので、つまりこのfindはひたすらファイルツリーをトラバースして全ファイルを列挙していたわけで。
会社の社員用ファイルサーバの全ファイルをbettyさんの持ち物にしてしまいましたとさ。

まあこのNASはNetAppだったので、.snapshotからuid, gidを拾って本来のuid, gidに戻すスクリプトをとっさに書いて戻したわけですが。

-print0は必ずケツにつけないと。と思い知りました。