Commande pour déverrouiller des fichiers «verrouillés» sous OS X

96

J'ai copié beaucoup de fichiers en lecture seule d'un système Windows sur mon Mac. Lors de l'affichage des informations pour chaque fichier à l'aide de "Obtenir des informations", je peux voir qu'ils sont verrouillés. J'écris un script bash pour copier certains fichiers et j'obtiens une erreur disant "Opération non autorisée". Alors, je dois d'abord déverrouiller les fichiers. Comme je vais souvent extraire des fichiers du système Windows, je souhaite que mon script les déverrouille.

Quelle est la commande du terminal pour déverrouiller les fichiers "verrouillés" sur OSX?

Michael Prescott
la source

Réponses:

136

Pour déverrouiller des fichiers, vous pouvez utiliser:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • chflags = changer les drapeaux sur les fichiers / dossiers tels que "verrouillé"
  • -R = récursif ou pour tout et suivre les répertoires dans le répertoire spécifié
  • nouchg = signifie que le fichier peut être modifié
  • /PATH/= est bien sur le chemin des fichiers que vous voulez modifier. Quelque chose comme: ça ~/Sites/mysite/directory/with/locked/files/marche aussi.
Chealion
la source
1
On dirait que j'ai trouvé la solution au moment même où vous répondiez. J'ai aussi appris que le -R est pour récursif. Donc, pour déverrouiller tous les fichiers du répertoire en cours, utilisez <br/> chflags nochg * <br/> et modifiez un seul fichier <br/> chflags nouchg onefile.txt Voir: mehtanirav.com/2009/04/16/recursively -unlock-fichiers-sur-mac-os-x
Michael Prescott
3
Il y a un autre indicateur pertinent schgqui est l'indicateur immuable du système (voir developer.apple.com/library/mac/documentation/Darwin/Reference/… ). La commande pour l'effacer est similaire:sudo chflags noschg PATH/TO/LOCKED/FILE
Andy Madge le
1
Utilisez /bin/ls -lO /path/to/filepour afficher le macOS flagssur les fichiers. Notez le chemin complet de la lscommande macOS ' '. Cela est nécessaire si GNU Coreutils est installé.
Tony Barganski
15

Vous pouvez également utiliser SetFile -a l, même s'il fait la même chose que chflags nouchg:

SetFile -a l file.ext

-a ldésactive le bit pour l'attribut verrouillé. Vous pouvez installer SetFile en téléchargeant le package Outils de ligne de commande à partir des préférences de Xcode ou de developer.apple.com/downloads .

John T
la source
C'est la méthode qui a fonctionné pour moi sur macOS Sierra avec quelques fichiers copiés à partir d'une machine Windows. J'ai utilisé: SetFile -al ~ / Documents / Arduino / Samples / *
callisto
14

Ceci est utile si vous souhaitez rechercher un répertoire entier et déverrouiller tous les fichiers.

Dans le terminal cdvers le répertoire

Cette commande trouve et en imprimera une liste .

$ find . -flags uchg

Cette commande les déverrouille .

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

Vous pouvez utiliser la première commande pour vérifier que tous les fichiers sont déverrouillés après l'exécution de la deuxième commande, le tour est joué!

Mamie McCall
la source
1
Bien que cela fonctionne, cela peut être extrêmement lent pour un grand nombre de fichiers car un nouveau processus est lancé pour chaque fichier.
Richard Waite
1

Il existe en réalité deux indicateurs de verrouillage pouvant être définis sur un fichier: uchget schg. Un fichier dont l' uchgindicateur est défini est immuable pour les utilisateurs normaux, mais il est modifiable par le système. Un fichier dont l' schgindicateur est défini est immuable par quiconque. Les deux drapeaux peuvent être définis en même temps.

Pour voir quels indicateurs sont définis sur un fichier, utilisez

ls -lO FILE

C’est une lettre majuscule, pas zéro.

Pour déverrouiller définitivement un fichier, vous devez exécuter

chflags nouchg,noschg FILE

comme si les deux drapeaux étaient définis et que vous n'en supprimiez qu'un, celui-ci serait toujours verrouillé.

Mecki
la source