1#! 2#[[BEGIN PROPERTIES]] 3# Type = Command 4# Order = 2.0 5# Interpreter = perl 6# Caption = chown 7# Descr =Change the owner (user and group) of one or more files and/or 8# Descr =directories. 9# Descr = 10# Descr =Selection details: 11# Descr = 12# Descr = Source: Ignored. 13# Descr = 14# Descr = Target: The files and directories whose owner shall be changed. 15# Icon = file_owner.tga 16# Hotkey = Ctrl+O 17#[[END PROPERTIES]] 18 19use strict; 20use warnings; 21BEGIN { require "$ENV{'EM_DIR'}/res/emFileMan/scripts/cmd-util.pl"; } 22 23if (IsFirstPass()) { 24 25 ErrorIfNoTargets(); 26 27 ConfirmIfTargetsAcrossDirs(); 28 29 my @tgt=GetTgt(); 30 my $oldUser; 31 my $oldGroup; 32 for (my $i=0; $i<@tgt; $i++) { 33 my @s=stat($tgt[$i]); 34 if ($i==0) { 35 $oldUser=$s[4]; 36 $oldGroup=$s[5]; 37 } 38 else { 39 if ($oldUser != $s[4]) { 40 $oldUser=undef; 41 if (!defined($oldGroup)) { last; } 42 } 43 if ($oldGroup != $s[5]) { 44 $oldGroup=undef; 45 if (!defined($oldUser)) { last; } 46 } 47 } 48 } 49 my $oldOwner=""; 50 if (defined($oldUser)) { $oldOwner .= getpwuid($oldUser); } 51 if (defined($oldGroup)) { $oldOwner .= ':' . getgrgid($oldGroup); } 52 53 my $newOwner=Edit( 54 "chown", 55 "Please enter a new owner for the target(s). You can give a user\n". 56 "or a group or both. A group has to be preceded by a colon. User\n". 57 "and group can be specified by name or ID.\n". 58 "\n". 59 "Examples:\n". 60 " root:dialout Set user and group.\n". 61 " 0 Set user only, by ID.\n". 62 " :dialout Set group only.", 63 $oldOwner 64 ); 65 66 SetFirstPassResult($newOwner); 67 68 SecondPassInTerminal("chown"); 69} 70 71my $e=TermRunAndSync( 72 "chown", 73 ($Config{'osname'} eq 'linux' or $Config{'osname'} eq 'cygwin') ? ( 74 "-v" 75 ) 76 : ( 77 ), 78 "--", 79 GetFirstPassResult(), 80 GetTgt() 81); 82 83SendUpdate(); 84 85TermEnd($e); 86