I copied a lot of read-only files from a Windows system to my Mac. When viewing the Info for each file using "Get Info", I can see they are Locked. I'm writing a bash script to copy over some files and I'm getting an error that says "Operation not permitted" So, first I need to unlock the files. Since I'll be pulling files from the Windows system often, I want my script to unlock these files.

What is the terminal command to unlock "Locked" files on OSX?


To unlock files you can use:

  • chflags = change flags on files/folders such as "locked"
  • -R = recursive or for everything and follow directories within the specified directory
  • nouchg = means the file can be changed
  • /PATH/ = of course is the path to the files you want to change. Something like: ~/Sites/mysite/directory/with/locked/files/ works as well.

This is helpful if you want to search an entire directory and unlock all files.

In the terminal cd to the directory

This command finds and will print a list of them.

$ find . -flags uchg

This command unlocks them.

$ find . -flags uchg -exec chflags nouchg {} \;

You can use the first command to double check that all the files are unlocked after running the second command, voilà !

  • 1
    While this works, it can be extremely slow for large numbers of files because it starts a new process for each file. – Richard Waite Aug 23 '14 at 23:52
  • I find I have to use + : find . -flags +uchg even to find files that only seem to have the one flag, uchg, set. – Chris F Carroll Nov 28 '19 at 13:05

You can also use SetFile -a l, even though it does the same thing as chflags nouchg:

SetFile -a l file.ext

-a l unsets the bit for the locked attribute. You can install SetFile by downloading the Command Line Tools package from Xcode's preferences or from developer.apple.com/downloads.

  • This is the method that worked for me on macOS Sierra with a few files copied from a Windows machine. I used : SetFile -a l ~/Documents/Arduino/Samples/* – callisto May 18 '17 at 6:59

There are actually two lock flags that can be set on a file: uchg and schg. A file that has the uchg flag set is immutable by normal users but it is mutable by the system. A file that has the schg flag set is immutable by anyone. Both flags can be set at the same time.

To see which flags are set on a file, use

ls -lO FILE

That is a capital letter o, not zero.

To definitely unlock a file, you would have to execute

chflags nouchg,noschg FILE

as if both flags were set and you remove only one of them, it will still be locked.

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