Comando para desbloquear archivos "bloqueados" en OS X

96

Copié muchos archivos de solo lectura de un sistema Windows a mi Mac. Al ver la información de cada archivo usando "Obtener información", puedo ver que están bloqueados. Estoy escribiendo un script bash para copiar sobre algunos archivos y recibo un error que dice "Operación no permitida" Entonces, primero necesito desbloquear los archivos. Dado que a menudo extraeré archivos del sistema de Windows, quiero que mi script desbloquee estos archivos.

¿Cuál es el comando de terminal para desbloquear archivos "bloqueados" en OSX?

Michael Prescott
fuente

Respuestas:

136

Para desbloquear archivos puedes usar:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • chflags = cambiar banderas en archivos / carpetas como "bloqueado"
  • -R = recursivo o para todo y seguir directorios dentro del directorio especificado
  • nouchg = significa que el archivo se puede cambiar
  • /PATH/= por supuesto, es la ruta a los archivos que desea cambiar. Algo así como: ~/Sites/mysite/directory/with/locked/files/funciona también.
Chealion
fuente
1
Parece que encontré la solución justo cuando respondías. También aprendí que el -R es para recursivo. Entonces, para desbloquear todos los archivos en el directorio actual, use <br/> chflags nochg * <br/> y para cambiar solo un archivo <br/> chflags nouchg onefile.txt Consulte: mehtanirav.com/2009/04/16/recursively -unlock-files-on-mac-os-x
Michael Prescott
3
Hay otra bandera relevante schgque es la bandera inmutable del sistema (vea developer.apple.com/library/mac/documentation/Darwin/Reference/… ) El comando para borrarlo es similar:sudo chflags noschg PATH/TO/LOCKED/FILE
Andy Madge
1
Use /bin/ls -lO /path/to/filepara ver macOS flagsen los archivos. Observe la ruta completa al lscomando macOS ' '. Esto es necesario si tiene GNU Coreutils instalado.
Tony Barganski el
15

También puede usar SetFile -a l, aunque hace lo mismo que chflags nouchg:

SetFile -a l file.ext

-a ldeshabilita el bit para el atributo bloqueado. Puede instalar SetFile descargando el paquete de herramientas de línea de comandos desde las preferencias de Xcode o desde developer.apple.com/downloads .

John T
fuente
Este es el método que funcionó para mí en macOS Sierra con algunos archivos copiados de una máquina Windows. Solía: SetFile -al ~ / Documents / Arduino / Samples / *
callisto
14

Esto es útil si desea buscar en un directorio completo y desbloquear todos los archivos.

En la terminal cdal directorio

Este comando encuentra e imprimirá una lista de ellos .

$ find . -flags uchg

Este comando los desbloquea .

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

Puede usar el primer comando para verificar que todos los archivos estén desbloqueados después de ejecutar el segundo comando, ¡voilà!

Mamie McCall
fuente
1
Si bien esto funciona, puede ser extremadamente lento para un gran número de archivos porque inicia un nuevo proceso para cada archivo.
Richard Waite el
1

En realidad, hay dos marcas de bloqueo que se pueden establecer en un archivo: uchgy schg. Un archivo que tiene el uchgindicador establecido es inmutable por los usuarios normales, pero el sistema lo puede mutar. Un archivo que tiene el schgindicador establecido es inmutable por cualquiera. Ambas banderas se pueden configurar al mismo tiempo.

Para ver qué banderas están establecidas en un archivo, use

ls -lO FILE

Esa es una letra mayúscula o, no cero.

Para desbloquear definitivamente un archivo, deberías ejecutar

chflags nouchg,noschg FILE

como si ambas banderas estuvieran configuradas y eliminas solo una de ellas, seguirá bloqueada.

Mecki
fuente