chown only where needed / speedup chown

5,304

use the find command, like:

find /folder_with_lots_of_files -not -user someuser -execdir chown someuser {} \+
Share:
5,304

Related videos on Youtube

rubo77
Author by

rubo77

SCHWUPPS-DI-WUPPS

Updated on September 18, 2022

Comments

  • rubo77
    rubo77 almost 2 years

    On a folder with millions of files this can take quite a long time:

    chown someuser -Rf /folder_with_lots_of_files/
    

    How can I speed this up if 99.9% of those files already belong to someuser?

  • Rabin
    Rabin over 8 years
    how is it different from running chown -R ? isn't find need to read the file owner as well ?
  • steve
    steve over 8 years
    chown -R blindly attempts to update the ownership of every file. The find approach only issues a chown where truly needed. May be worth trying xargs too, so that a single chown process is issued for, say, every 15 files.
  • PSkocik
    PSkocik over 8 years
    But it'll still have to stat each file in the tree and that shouldn't be (?) any cheaper that an attempt at chown. I think find with -prune (with -exec ... \+) might help (if there's a criterion for pruning a subtree that the OP can use).
  • PSkocik
    PSkocik over 8 years
    Interesting. This does appear faster. Recursively chowning the kernel tree takes me about 200ms of sys time. The find approach takes about 100.
  • PSkocik
    PSkocik over 8 years
    Now I realize chmod has to stat echo node to traverse the tree. That should explain the doubled sys time -- it needs to both stat and chown and both syscalls should be quick, with the syscall overhead dominating.