Problem mit chmod
Holger
- perl
Hallo,
ich lese mit @fileinfos = stat($file) und $fileinfo[2] die vergebenen Rechte für eine Datei aus. Dabei erhalte ich z.B. werte wie 100644. Dieser Wert wird mit anderen in einer Zeichenkette gespeichert und später wieder zerlegt und soll Mittels chmod($teil_des_string,$file2) wieder zurückgeschreiben werden. Dabei erhallte ich abe immer falsche Rechteangaben wie z.B. rwS oder r-T. Auch ein entfernen der ersten 2 Zeichen der Zahl sodass 0644 übrig bleibt ändert am Ergebnis nichts. Wie bringe ich perl dazu, dass er die Zeichenkette "0644" bei der übergabe an chmod in eine Oktal- und keine Dezimalzahl umwandelt?
Danke!
MfG Holger
Hallo,
[..]bleibt ändert am Ergebnis nichts. Wie bringe ich perl dazu, dass er die Zeichenkette "0644" bei der übergabe an chmod in eine Oktal- und keine Dezimalzahl umwandelt?
Hmm. vielleicht mit oct() ???
oct EXPR
oct Interprets EXPR as an octal string and returns the corresponding
value. (If EXPR happens to start off with "0x", interprets it as
a hex string. If EXPR starts off with "0b", it is interpreted as
a binary string.) The following will handle decimal, binary,
octal, and hex in the standard Perl or C notation:
$val = oct($val) if $val =~ /^0/;
If EXPR is omitted, uses "$_". To go the other way (produce a
number in octal), use sprintf() or printf():
$perms = (stat("filename"))[2] & 07777;
$oct_perms = sprintf "%lo", $perms;
The oct() function is commonly used when a string such as "644"
needs to be converted into a file mode, for example. (Although
perl will automatically convert strings into numbers as needed,
this automatic conversion assumes base 10.)
--Rolf
Hallo,
Hmm. vielleicht mit oct() ???
Ich dachte immer oct() wandelt nur Oktal- in zezimalzahlen um. Dann werde ich das mal so probieren. Vielen Dank!
MfG Holger
Hi,
Ich dachte immer oct() wandelt nur Oktal- in zezimalzahlen um. Dann werde ich das mal so probieren. Vielen Dank!
Guck bitte auch noch mal in die hilfe zu sprintf
perldoc -f sprintf
da steht auch noch was
...
Perl's "sprintf" permits the following universally-known
conversions:
%o an unsigned integer, in octal
%x an unsigned integer, in hexadecimal
...
--Rolf
Hallo,
vielen Dank. Ich habe jetzt die Lösung gefunden:
my @fileinfo = stat($file_name);
my $perms = '0'.sprintf "%lo",(((stat($file_name))[2]) & 0777);
Jetzt kann man $perms als string verwenden.
Und später:
chmod(oct($perms),$file_name);
Danke!
MfG Holger