Ich versuche, eine Standard-POSIX-Methode zu finden, um die Berechtigungen einer Datei in eine andere Datei zu duplizieren. Auf einem GNU-System ist dies einfach:
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
Leider ist das Flag --reference to chmod keine Standardoption. Das ist also für meine Zwecke. Ich würde es vorziehen, ein Einzeiler zu sein, aber das ist nicht notwendig. Letztendlich muss es in der POSIX sh-Syntax sein.
command-line
unix
chmod
posix
Alex
quelle
quelle
cp has template
sollte verwendet werdencp -p
, um die Modus- und Besitzattribute beizubehalten.cp
wenn sich der Eigentümer / die Gruppe der Datei (z. B. "Benutzer") von demjenigen unterscheidet, der das Kopieren durchführt (z. B. root).cp -p
dort.Mit dem
stat
Befehl können Sie die Dateiberechtigung abrufen:Mac OS X (BSD) -Syntax:
Linux-Syntax (nicht sicher):
Das Symbol ` ist ein Backquote.
quelle
stat
POSIX dies erfordert. Es ist oft nicht verfügbar.Zu diesem Zweck können die ACL-Dienstprogramme getfacl und setfacl verwendet werden, aber ich weiß nicht, ob dieses POSIX- System kompatibel genug ist. Funktioniert zumindest unter FreeBSD 8.0 und Linux, andererseits müssen möglicherweise die ACL-Dienstprogramme installiert werden.
Von der Manpage:
Ich denke, getfacl und setfacl können neben ACLs auch Standard-Dateiberechtigungen ausführen.
quelle
cp -p
behält die Dateiberechtigungen bei.quelle
-p
) für das, was das OP wünscht, nämlich das Duplizieren von Berechtigungen für eine andere Datei, nicht für ein Duplikat der Datei.Ein tragbarer, unkomplizierter Weg ist kein Standarddienstprogramm. Sie müssten stat () für die Vorlagendatei und chmod () für die Zieldatei (en) aufrufen. Dies bedeutet, eine Sprache wie C oder eine andere weit verbreitete Sprache wie Perl zu verwenden.
Die Dateizugriffsberechtigungen werden im Mitglied struct stat st_mode durch die 0007777-Bits angegeben. Dennis 'Lösung ist richtig, wenn die E / A etwas schwer ist. Bei wirklich großen Dateien kann dies fehlschlagen:
Betrachten Sie dieses nicht produktionsfertige Beispiel:
quelle