find -print0
いまどきは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は必ずケツにつけないと。と思い知りました。