Команда для разблокировки «заблокированных» файлов на OS X

96

Я скопировал много файлов только для чтения из системы Windows на мой Mac. При просмотре информации для каждого файла с помощью «Получить информацию», я вижу, что они заблокированы. Я пишу сценарий bash для копирования некоторых файлов и получаю сообщение об ошибке «Операция не разрешена». Итак, сначала мне нужно разблокировать файлы. Поскольку я буду часто извлекать файлы из системы Windows, я хочу, чтобы мой скрипт разблокировал эти файлы.

Что такое команда терминала для разблокировки «заблокированных» файлов в OSX?

Майкл Прескотт
источник

Ответы:

136

Для разблокировки файлов вы можете использовать:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • chflags = поменять флаги на файлах / папках, например "заблокирован"
  • -R = рекурсивно или для всего и следовать каталогам в указанном каталоге
  • nouchg = означает, что файл можно изменить
  • /PATH/= конечно это путь к файлам, которые вы хотите изменить. Нечто подобное: ~/Sites/mysite/directory/with/locked/files/работает также.
Chealion
источник
1
Похоже, я нашел решение так же, как вы отвечали. Я также узнал, что -R для рекурсивного. Итак, чтобы разблокировать все файлы в текущем каталоге, используйте <br/> chflags nochg * <br/> и измените только один файл <br/> chflags nouchg onefile.txt См .: mehtanirav.com/2009/04/16/recursively -unlock-files-on-mac-os-x
Майкл Прескотт,
3
Есть еще один соответствующий флаг, schgкоторый является системным неизменяемым флагом (см. Developer.apple.com/library/mac/documentation/Darwin/Reference/… ) Команда для его очистки похожа:sudo chflags noschg PATH/TO/LOCKED/FILE
Энди Мэдж
1
Используйте /bin/ls -lO /path/to/fileдля просмотра macOS flagsв файлах. Обратите внимание на полный путь к команде macOS ' ls'. Это необходимо, если у вас установлен GNU Coreutils.
Тони Баргански
15

Вы также можете использовать SetFile -a l, хотя он делает то же самое, что и chflags nouchg:

SetFile -a l file.ext

-a lсбрасывает бит для заблокированного атрибута. Вы можете установить SetFile, загрузив пакет инструментов командной строки из настроек XCode или с developer.apple.com/downloads .

Джон Т
источник
Это метод, который работал для меня на MacOS Sierra с несколькими файлами, скопированными с компьютера с Windows. Я использовал: SetFile -al ~ / Documents / Arduino / Samples / *
callisto
14

Это полезно, если вы хотите выполнить поиск по всему каталогу и разблокировать все файлы.

В терминале cdк каталогу

Эта команда находит и распечатывает их список .

$ find . -flags uchg

Эта команда разблокирует их .

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

Вы можете использовать первую команду для двойной проверки того, что все файлы разблокированы после выполнения второй команды, вуаля!

Мами Макколл
источник
1
Хотя это работает, оно может быть очень медленным для большого количества файлов, поскольку запускает новый процесс для каждого файла.
Ричард Уэйт
1

На самом деле для файла можно установить два флага блокировки: uchgи schg. Файл с установленным uchgфлагом является неизменным для обычных пользователей, но он может изменяться системой. Файл с установленным schgфлагом является неизменным для всех. Оба флага могут быть установлены одновременно.

Чтобы увидеть, какие флаги установлены в файле, используйте

ls -lO FILE

Это заглавная буква o, а не ноль.

Чтобы однозначно разблокировать файл, вам нужно выполнить

chflags nouchg,noschg FILE

как если бы оба флага были установлены и вы удалили только один из них, он все равно будет заблокирован.

Mecki
источник