Polecenie odblokowania „Zablokowanych” plików w systemie OS X

96

Skopiowałem wiele plików tylko do odczytu z systemu Windows na komputer Mac. Podczas przeglądania informacji dla każdego pliku za pomocą „Uzyskaj informacje” widzę, że są one zablokowane. Piszę skrypt bash, aby skopiować niektóre pliki i pojawia się błąd „Operacja niedozwolona”. Najpierw muszę odblokować pliki. Ponieważ często ściągam pliki z systemu Windows, chcę, aby mój skrypt odblokował te pliki.

Jakie polecenie terminalu służy do odblokowywania „Zablokowanych” plików w OSX?

Michael Prescott
źródło

Odpowiedzi:

136

Aby odblokować pliki, możesz użyć:

chflags -R nouchg /PATH/TO/DIRECTORY/WITH/LOCKED/FILES/
  • chflags = zmień flagi na plikach / folderach takich jak „zablokowany”
  • -R = rekurencyjny lub do wszystkiego i podążaj za katalogami w określonym katalogu
  • nouchg = oznacza, że ​​plik można zmienić
  • /PATH/= oczywiście jest ścieżką do plików, które chcesz zmienić. Coś w stylu: ~/Sites/mysite/directory/with/locked/files/działa również.
Chealion
źródło
1
Wygląda na to, że znalazłem rozwiązanie tak, jak odpowiadałeś. Dowiedziałem się również, że -R jest rekurencyjny. Aby zatem odblokować wszystkie pliki w bieżącym katalogu, użyj <br/> chflags nochg * <br/> i zmień tylko jeden plik <br/> chflags nouchg onefile.txt Patrz: mehtanirav.com/2009/04/16/recursively -unlock-files-on-mac-os-x
Michael Prescott
3
Jest jeszcze jedna odpowiednia flaga, schgktóra jest niezmienną flagą systemu (patrz developer.apple.com/library/mac/documentation/Darwin/Reference/... ) Polecenie wyczyszczenia jest podobne:sudo chflags noschg PATH/TO/LOCKED/FILE
Andy Madge
1
Służy /bin/ls -lO /path/to/filedo wyświetlania systemu macOS flagsna plikach. Zwróć uwagę na pełną ścieżkę do polecenia macOS ls. Jest to potrzebne, jeśli masz zainstalowany GNU Coreutils.
Tony Barganski,
15

Możesz także użyć SetFile -a l, nawet jeśli robi to samo, co chflags nouchg:

SetFile -a l file.ext

-a lresetuje bit dla zablokowanego atrybutu. Możesz zainstalować SetFile, pobierając pakiet narzędzi wiersza poleceń z preferencji Xcode lub z developer.apple.com/downloads .

John T.
źródło
Jest to metoda, która działała na mnie w systemie macOS Sierra z kilkoma plikami skopiowanymi z komputera z systemem Windows. Użyłem: SetFile -al ~ / Documents / Arduino / Samples / *
callisto
14

Jest to przydatne, jeśli chcesz przeszukać cały katalog i odblokować wszystkie pliki.

W terminalu cddo katalogu

To polecenie znajduje i wydrukuje ich listę .

$ find . -flags uchg

To polecenie odblokowuje je .

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

Możesz użyć pierwszego polecenia, aby dokładnie sprawdzić, czy wszystkie pliki są odblokowane po uruchomieniu drugiego polecenia, voilà!

Mamie McCall
źródło
1
Chociaż działa, może być bardzo powolny w przypadku dużej liczby plików, ponieważ uruchamia nowy proces dla każdego pliku.
Richard Waite,
0

Istnieją dwa flagi blokowania, które można ustawić w pliku: uchgi schg. Plik z uchgustawioną flagą jest niezmienny dla zwykłych użytkowników, ale może zostać zmieniony przez system. Plik z schgustawioną flagą jest niezmienny dla każdego. Obie flagi można ustawić jednocześnie.

Aby zobaczyć, które flagi są ustawione w pliku, użyj

ls -lO FILE

To wielka litera o, a nie zero.

Aby definitywnie odblokować plik, musisz go wykonać

chflags nouchg,noschg FILE

tak jakby obie flagi zostały ustawione, a ty usuniesz tylko jedną z nich, nadal będzie zablokowana.

Mecki
źródło