Command to unlock "Locked" files on OS X

102

53

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?

Michael Prescott

Posted 2009-09-14T02:15:23.560

Reputation: 3 351

Answers

144

To unlock files you can use:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • 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.

Chealion

Posted 2009-09-14T02:15:23.560

Reputation: 22 932

3

There's another relevant flag schg which is the system immutable flag (see https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/chflags.1.html) The command to clear it is similar: sudo chflags noschg PATH/TO/LOCKED/FILE

– Andy Madge – 2015-01-12T20:22:56.377

1Use /bin/ls -lO /path/to/file to view the macOS flags on files. Notice the full path to the macOS 'ls' command. This is needed if you have GNU Coreutils installed. – Tony Barganski – 2018-11-07T05:57:13.837

1

Looks like I found the solution just as you were responding. I also learned that the -R is for recursive. So, to unlock all files in the current directory use<br/> chflags nochg *<br/> and to change just one file<br/> chflags nouchg onefile.txt See: http://www.mehtanirav.com/2009/04/16/recursively-unlock-files-on-mac-os-x

– Michael Prescott – 2009-09-14T02:37:54.607

15

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.

John T

Posted 2009-09-14T02:15:23.560

Reputation: 149 037

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 – 2017-05-18T06:59:49.740

15

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à !

Mamie McCall

Posted 2009-09-14T02:15:23.560

Reputation: 161

1While this works, it can be extremely slow for large numbers of files because it starts a new process for each file. – Richard Waite – 2014-08-23T23:52:39.170

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 – 2019-11-28T13:05:04.783

2

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.

Mecki

Posted 2009-09-14T02:15:23.560

Reputation: 244