139

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
  • 4,011
  • 13
  • 50
  • 65

4 Answers4

193

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.
slhck
  • 223,558
  • 70
  • 607
  • 592
Chealion
  • 25,408
  • 8
  • 67
  • 75
  • 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
    chflags nochg *
    and to change just one file
    chflags nouchg onefile.txt See: http://www.mehtanirav.com/2009/04/16/recursively-unlock-files-on-mac-os-x
    – Michael Prescott Sep 14 '09 at 02:37
  • 5
    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 Jan 12 '15 at 20:22
  • 1
    Use ```/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 Nov 07 '18 at 05:57
  • @AndyMadge - I needed to use that flag, from following directions on this page: https://www.askdavetaylor.com/how-to-delete-locked-file-on-mac-macos/. But the link you provided is dead. Do you have an updated link? – Adam_G Mar 16 '21 at 19:54
  • 1
    @Adam_G seems like Apple have moved the web page, but you can view the man page directly in MacOS terminal with the `man chflags` command – Andy Madge Mar 17 '21 at 12:34
  • this worked for me. Thanks – Rakshitha Muranga Rodrigo Feb 20 '22 at 10:21
25

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

Sufian
  • 129
  • 6
Mamie McCall
  • 261
  • 3
  • 5
18

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.

Lri
  • 40,894
  • 7
  • 119
  • 157
John T
  • 163,373
  • 27
  • 341
  • 348
  • 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 06:59
  • As fyi, `/usr/bin/SetFile` (`setfile`) was deprecated with Xcode 6 along as were other tools supporting Carbon development; although `SetFile` still appears to install as part of Xcode 12 additional command line tools. See `man SetFile` – marc-medley May 29 '21 at 03:38
10

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
  • 858
  • 8
  • 11