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
Post a Comment