6

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?

10

use the find command, like:

find /folder_with_lots_of_files -not -user someuser -execdir chown someuser {} \+
  • 2
    how is it different from running chown -R ? isn't find need to read the file owner as well ? – Rabin Nov 24 '15 at 22:57
  • 1
    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. – steve Nov 24 '15 at 22:59
  • 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 Nov 24 '15 at 23:02
  • Interesting. This does appear faster. Recursively chowning the kernel tree takes me about 200ms of sys time. The find approach takes about 100. – PSkocik Nov 24 '15 at 23:12
  • find has to stat each file to traverse the tree (to distinguish directories), and if the number of chown calls are relatively small, that will run faster. It would not run faster if the fraction were not small, due to overhead of running the -exec to make subprocesses. – Thomas Dickey Nov 24 '15 at 23:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.