イメージ
 Kindle Paperwhiteが故障 2023年の3月購入なので、1年の保証期間はとっくに過ぎている。 状況は、画面右端が充電後に表示欠けを起こすようになった。 最初は1cm程度だったのに、いまでは2cm程度表示できず、右端の文字が読めない状況に…。 さて、修理可能なのか不明なので、Amazonに問い合わせすることに…。 チャットで問い合わせを選択すると、すぐに担当者につながった。 日本人の名前ではなかったけれど、とても丁寧な対応でしっかり教育されている感じ。 結果的には、 ・修理対応は行っていない。 ・買い替えるしか手段はない。 しかも、同一機種はすでに無く、後継機種(画面が7インチにUp)しか選択できない。 さて、どうしようかとチャットしながら考えていたら、先方から提案が…。  再度、Kindle端末を購入されるのであれば、15%OFFのギフトを送る(登録)ってくれる。  ご検討くださいとのことだった…。 なるほど…。  いま Kindle端末 を見ると22,980円か〜。さらに15%OFFとなると、19,533円 迷うなぁ…。もうタブレットを使用しちゃおうかとも考えていたので…。 ギフトの期限は無いそうなので、しばらく悩んでみますゎ。

findで条件に合わないものを探す

findってあんまり使わないけど…

今頃になって、知ったというか、調べたというか…。

一体何年使っているんだと言われそうなくらい初期の頃から使っているのに、こんな使い方したことなかったなぁと、自分でも驚いた。
忘れないとは思うけど、きっと同じような人がいるだろうと思うので、書いておく。

これまでの使い方

いままで、findを使う時って、
  • 特定の拡張子が含まれている
  • サイズが1MB以上
  • 何日前より古いファイル
  • 30分以内に編集したファイル
なんて使い方が多かった。

でもって、中身を検索するならgrepだし…。

もちろん、パイプも使うし、xargsも使ってきた。

今回、はて?と考えた事

今回相談があって、LibreOfficeで編集ができないファイルがある。とな…。
調べてみると、オーナーがnobodyになっている。
ちょいちょい不具合もあるので、根本原因は調査中だけど、編集できないのは困るというので、急ぎで修正する必要がある。

さて、user_aのホームフォルダ以下で、user_aがユーザではないファイルを探す…。
まず、思いついたのは findだよなぁと…。
# find /home/user_a -user user_a
これだと、user_aが所有者のファイルがリストアップされる。

あれ? 否定はどうするんだ???と
grep -v はよく使うけれど、findの条件否定って、よくよく考えると使ったことがないような気がする。(20年近くUNIX系触っているのに…)

まずは、Helpだよね。

$ find --help
使用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

デフォルトのパスはカレントディレクトリです。デフォルトの評価式 (expression) は -print です。評価式は演算子、オプション、テストおよびアクションで構成されます。

演算子 (優先順位は降順です。特に指定がない場合は -and が暗黙的に使用されます):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

位置オプション (常に真): -daystart -follow -regextype

通常オプション (常に真。他の評価式の前に指定します):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xdev -ignore_readdir_race -noignore_readdir_race

テスト (N は +N、-N または Nで指定します): -amin N -anewer FILE -atime N -cmin N
      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
      -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]

actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

バグを発見した場合は findutils バグ報告ページ http://savannah.gnu.org/ を
使用して報告 (および修正の進捗を追跡) してください。Web を利用できない場合
は <bug-findutils@gnu.org> に E-mail を送ってください。

演算子のところに書いてあるじゃないか…。
terminalの高さが25行だと、ちょうどスクロールアウトするんだよね。

「!」か 「-not」を使えと。
$ find /home/user_a ! -user user_a
 これだけだった。
でもって、存在を確認して、chown するだけ。

まあ、滅多に使わないんだろうな。
次回はいつ使うのやら…。

調べていたら、他にも便利なものがあった

久々に、find --help なんてやったので、良く読んでみると、actionの最初に「-delete」なんて書いてある。

???

ぐぐってみたら、最近のfindには用意されているらしい。
自分の常識では、-exec rm {} か xargs rm と覚えていたのに…。
$ find ~/ -name '.lock.*' | xargs rm
の代わりに、
$ find ~/ -name '.lock.*' -delete
でOKなんだってさ…。
(ちなみに、LibreOfficeが作成するlockファイルの残骸をまとめて消す処理ですが)

読んでみるもんだな。

コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

WPS Officeで日本語入力ができない

VirtualBoxでUSBから起動