Guest User

group file operations

a guest
Jan 8th, 2012
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.40 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use Encode;
  7.  
  8. binmode STDOUT, ":utf8";
  9. binmode STDIN, ":utf8";
  10. binmode STDERR, ":utf8";
  11.  
  12. #use Cwd;
  13. #my $dir = getcwd();
  14.  
  15. my ($pat, $what, $to, $cmd) = @ARGV;
  16. my $ln = 0;
  17.  
  18. $to = '"'.$to.'"';
  19.  
  20. my $myname = $0;
  21. $myname =~ s/\.\///;
  22.  
  23. if ( !$pat or !$what or !$to or !$cmd )
  24.   {
  25.     my $me = $myname;
  26.     $me =~ s/^.*\///;
  27.     die 'Usage: ' . $me . ' {filename pattern} {what replace} {replace to} {command to exec}' . "\n"
  28.       . 'Hint in {replace to} you can use $fn. It\'l be replaced by number of file. Files sorted by name in alphabetical order' . "\n"
  29.       .'for example: #> '. $me . ' \'*.c\' \'\w\.\' \'e_$fn\.\' cp' . "\n";
  30.   }
  31.  
  32.  
  33. my @old = ();
  34. my @new = ();
  35.  
  36.  
  37. # opendir(DIR,$dir);
  38. # my @files = readdir(DIR);
  39. # closedir(DIR);
  40.  
  41. my @files = glob($pat);
  42.  
  43. foreach my $fname (@files) {
  44.   if ( $fname =~ m/$myname$/ ) { next; }
  45.   $fname =~ s/\s+$//;
  46.   my $nto = eval($to);
  47.   my $nfname = $fname;
  48.   $nfname =~ s/$what/$nto/;
  49.   if ( $fname ne $nfname )
  50.     {
  51.       push( @old, $fname );
  52.       push( @new, $nfname );
  53.     }
  54.   $ln += 1;
  55. }
  56.  
  57.  
  58. print "Now we will exec: " . $cmd . " " . $old[0] . " " . $new[0] . "\nIs it OK(yes/no)?\n";
  59. my $answer = <STDIN>;
  60.  
  61. if ( $answer eq "yes" )
  62.   {
  63.     for (my $i = 0; $i < ($#old + 1); $i++) {
  64.       system($cmd, $old[$i], $new[$i]);
  65.     }
  66.   }
  67. else
  68.   {
  69.     print "[Canceled]\n";
  70.   }
Advertisement
Add Comment
Please, Sign In to add comment