linux - perl + add warn massage in perl one liner code -


i have perl 1 liner code rename names of files/directories

code:

find /tmp -name "*$name_that_we_want_to_change*" -exec /tmp/rename.pl  's/\q$env{name_that_we_want_to_change}\e/$1$env{new_name}$2/' {} + 

i want add print message ( warn ) , code in order print file/directory change

so add line:

       && warn "rename file - [$env{$name_that_we_want_to_change}"' 

so finaly update code be:

find /tmp -name "*$name_that_we_want_to_change*" -exec /tmp/rename.pl  's/\q$env{name_that_we_want_to_change}\e/$1$env{new_name}$2/ {} + && warn "rename file - [$env{$name_that_we_want_to_change}"' 

when run perl 1 liner follwoing error message:

    find: missing argument `-exec' 

please advice need fix/update in code ?

. . . . .

full example ( before add warn "........." )

cd /tmp touch orig-name touch new-name export name_that_we_want_to_change=orig-name export new_name=new-name    find /tmp -name "*$name_that_we_want_to_change*" -exec /tmp/rename.pl  's/\q$env{name_that_we_want_to_change}\e/$1$env{new_name}$2/' {} +  ls | grep new-name new-name    more /tmp/rename.pl  #!/usr/bin/perl # # rename script examples lwall: #       rename 's/\.orig$//' *.orig #       rename 'y/a-z/a-z/ unless /^make/' * #       rename '$_ .= ".bad"' *.f #       rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *  $op = shift; (@argv) { $was = $_; eval $op; die $@ if $@; rename($was,$_) unless $was eq $_; 

#! /usr/bin/perl use autodie; (@argv) {   rename $_, $_ =~ s/\q$env{origname}\e/$env{destname}/r     , warn "rename file - [$_]\n"; } 

or if you're on centos, , can't use e.g. cpanel's newer perl:

#! /usr/bin/perl (@argv) {   (my $new = $_) =~ s/\q$env{origname}\e/$env{destname}/     , warn "rename file - [$_]\n";   rename $_, $new or die "rename of ``$_'' ``$new'' failed: $!"; } 

or if need arbitrary perl:

#! /usr/bin/perl $op = shift; (@argv) {   $old = $_;   eval $op; die $@ if $@;   next if $old eq $_;   rename $old, $_ , warn "rename file - [$old]\n" } 

mind subtle differences.

in first 2 cases, adjust find appropriately:

find /tmp -name "*$origname*" -exec /tmp/rename.pl {} + 

it's not significant environment variables less painful.

by way, error not perl 1 very obvious find error. find , find -exec dangerous, yo: have knows they're doing take @ script before run it.


Comments

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -