Befehl zum Entsperren gesperrter Dateien unter OS X

96

Ich habe viele schreibgeschützte Dateien von einem Windows-System auf meinen Mac kopiert. Wenn ich die Informationen für jede Datei mit "Get Info" anzeige, kann ich sehen, dass sie gesperrt sind. Ich schreibe ein Bash-Skript, um einige Dateien zu kopieren, und es wird die Fehlermeldung "Vorgang nicht zulässig" angezeigt. Daher muss ich zuerst die Dateien entsperren. Da ich häufig Dateien aus dem Windows-System ziehen werde, möchte ich, dass mein Skript diese Dateien entsperrt.

Was ist der Terminalbefehl zum Entsperren von "gesperrten" Dateien unter OSX?

Michael Prescott
quelle

Antworten:

136

Zum Entsperren von Dateien können Sie Folgendes verwenden:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • chflags = Flags an Dateien / Ordnern wie "gesperrt" ändern
  • -R = rekursiv oder für alles und verfolge Verzeichnisse innerhalb des angegebenen Verzeichnisses
  • nouchg = bedeutet, dass die Datei geändert werden kann
  • /PATH/= natürlich ist der Pfad zu den Dateien, die Sie ändern möchten. Sowas wie: ~/Sites/mysite/directory/with/locked/files/funktioniert auch.
Chealion
quelle
1
Sieht so aus, als hätte ich die Lösung gefunden, als Sie geantwortet haben. Ich habe auch gelernt, dass das -R für rekursiv ist. Um alle Dateien im aktuellen Verzeichnis zu entsperren, verwenden Sie <br/> chflags nochg * <br/> und ändern Sie nur eine Datei. <br/> chflags nouchg onefile.txt Siehe: mehtanirav.com/2009/04/16/recursively -unlock-files-on-mac-os-x
Michael Prescott
3
Es gibt eine andere entsprechende Fahne , schgdie das System unveränderbar Flag ist (siehe developer.apple.com/library/mac/documentation/Darwin/Reference/... ) Der Befehl um es zu löschen ist ähnlich:sudo chflags noschg PATH/TO/LOCKED/FILE
Andy Madge
1
Verwenden Sie /bin/ls -lO /path/to/filediese Option , um das MacOS flagsin Dateien anzuzeigen . Beachten Sie den vollständigen Pfad zum lsBefehl macOS ' '. Dies wird benötigt, wenn Sie GNU Coreutils installiert haben.
Tony Barganski
15

Sie können auch verwenden SetFile -a l, obwohl es dasselbe tut wie chflags nouchg:

SetFile -a l file.ext

-a lsetzt das Bit für das gesperrte Attribut zurück. Sie können SetFile installieren, indem Sie das Command Line Tools-Paket aus den Xcode-Einstellungen oder von developer.apple.com/downloads herunterladen .

John T
quelle
Dies ist die Methode, die bei mir unter macOS Sierra mit ein paar Dateien funktioniert hat, die von einem Windows-Computer kopiert wurden. Ich verwendete: SetFile -al ~ / Documents / Arduino / Samples / *
callisto
14

Dies ist hilfreich, wenn Sie ein gesamtes Verzeichnis durchsuchen und alle Dateien entsperren möchten.

Im Terminal cdzum Telefonbuch

Dieser Befehl findet und druckt eine Liste von ihnen .

$ find . -flags uchg

Dieser Befehl gibt sie frei .

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

Mit dem ersten Befehl können Sie überprüfen, ob alle Dateien entsperrt sind, nachdem Sie den zweiten Befehl, voilà!, Ausgeführt haben.

Mamie McCall
quelle
1
Dies funktioniert zwar, kann jedoch bei einer großen Anzahl von Dateien sehr langsam sein, da für jede Datei ein neuer Prozess gestartet wird.
Richard Waite
0

Es gibt tatsächlich zwei Sperrflags, die für eine Datei gesetzt werden können: uchgund schg. Eine Datei, für die das uchgFlag gesetzt ist, ist für normale Benutzer unveränderlich, für das System jedoch veränderlich. Eine Datei, für die das schgFlag gesetzt ist, kann von niemandem geändert werden. Beide Flags können gleichzeitig gesetzt werden.

Verwenden Sie, um zu sehen, welche Flags in einer Datei gesetzt sind

ls -lO FILE

Das ist ein Großbuchstabe o, nicht Null.

Um eine Datei definitiv zu entsperren, müssten Sie ausführen

chflags nouchg,noschg FILE

Als ob beide Flags gesetzt wären und Sie nur eines davon entfernen, wird es dennoch gesperrt.

Mecki
quelle