Czy istnieje polecenie lub flaga do sklonowania własności / uprawnień użytkownika / grupy do pliku z innego pliku? Czy chcesz, aby perms i własność były dokładnie takie same jak w innym pliku?
shell
permissions
files
chown
użytkownik394
źródło
źródło
--reference
parametrchmod
ichown
wcześniej :).Na dowolnym Uniksie z narzędziami GNU, takim jak (niewbudowany) Linux lub Cygwin, możesz używać
chmod --reference
ichown --reference
.Jeśli twój system ma listy ACL , spróbuj poleceń ACL
getfacl
isetfacl
. Te polecenia różnią się nieco w zależności od systemu, ale w wielu przypadkach można użyćgetfacl other_file | setfacl -bnM - file_to_change
do skopiowania uprawnień. To nie kopiuje własności; możesz to zrobić ostrożnie analizującls -l other_file
, zakładając, że nie masz nazw użytkowników ani grup zawierających spacje.źródło
Zrobił polecenia bash na podstawie reakcji Matteo :)
Kod:
chmod $( stat -f '%p' "$1" ) "${@:2}"
Stosowanie:
cp-permissions <from> <to>...
źródło
${*:2}
? Nigdy więcej tego nie rób! To się nie powiedzie, jeśli którakolwiek z nazw plików zawiera spację (lub tabulatory). Użyj"${@:2}"
. Użyj"$1"
zamiast tego$1
.chmod "$(stat -c '%a' "$fromfile")" tofile
w GNU Coreutils, ale równie dobrze możesz użyć--reference
w tym przypadku, ponieważstat
narzędzie CLI nie jest POSIX, mówi nawet pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htmltols -l
tego nie da: „Wyjście ls (z opcją -l i powiązanymi opcjami) zawiera informacje, które logicznie mogłyby zostać wykorzystane przez narzędzia takie jak chmod i touch, aby przywrócić pliki do znanego stanu. Jednak informacje te są przedstawione w formacie, który nie może być użyty bezpośrednio przez te narzędzia lub być łatwo przetłumaczone na format, którego można użyć. ”Jeśli nie używasz systemu z chmod / chown GNU (które obsługują tę
--reference
opcję), możesz spróbować przeanalizować wynikls -l
Oto mały skrypt dla
chmod
(jeśli widzisz, który obsługuje rozszerzone wyrażenia regularne, można je napisać w znacznie bardziej czytelny sposób ...)AKTUALIZACJA :
Jest to jeszcze łatwiejsze przy użyciu
stat
:źródło
ls -l
dane wyjściowe, możesz przeanalizowaćstat
dane wyjściowe.stat
tutaj składni * BSD . Twojechmod $(stat ...)
polecenie nie będzie działać, ponieważ%p
samo wypisuje za dużo informacji dla * BSDchmod
, użyj%Lp
do wyprowadzenia tylko bitów u / g / o. W przypadku lepkich / setuid / setgid bitów wymagane byłoby coś nieco bardziej skomplikowanego.Chciałem dodać korektę do skryptu Matteo . Należy użyć pętli for, aby sprawdzić, czy pliki istnieją przed uruchomieniem na nich komendy chmod. Pozwoli to na bardziej płynny błąd skryptu.
Myślę, że jest to najlepsza opcja, ponieważ można jej używać we wszystkich systemach operacyjnych * nix, takich jak Solaris, Linux itp.
Odkryłem, że na jednym z moich komputerów Solaris 10
stat
nie został znaleziony. Może to być problem z moją konfiguracją.źródło
To działa dla mnie:
cp -p --attributes-only <from> <to>
źródło