gpt4 book ai didi

linux - Perl + 在 Perl 一行代码中添加警告按摩

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:04 25 4
gpt4 key购买 nike

我有 perl one liner 代码,可以重命名文件/目录的名称

代码:

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}"'

所以最终更新代码将是:

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}"'

当我运行 perl oneliner 时,我收到以下错误消息:

    find: missing argument to `-exec'

请建议我需要在代码中修复/更新哪些内容?

。。。。.

完整示例(在添加警告“.........”之前)

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 from 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;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;

最佳答案

#! /usr/bin/perl
use autodie;
for (@ARGV) {
rename $_, $_ =~ s/\Q$ENV{ORIGNAME}\E/$ENV{DESTNAME}/r
and warn "Rename file - [$_]\n";
}

或者,如果您使用的是 CentOS,并且无法使用例如cPanel 的较新 perl:

#! /usr/bin/perl
for (@ARGV) {
(my $new = $_) =~ s/\Q$ENV{ORIGNAME}\E/$ENV{DESTNAME}/
and warn "Rename file - [$_]\n";
rename $_, $new or die "Rename of ``$_'' to ``$new'' failed: $!";
}

或者如果您确实需要任意 Perl:

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

注意细微的差异。

在前两种情况下,适当调整您的find:

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

我的环境变量不那么痛苦并不重要。

顺便说一句,您的错误与其说是 Perl 错误,不如说是一个非常明显 find 错误。 find,尤其是 find-exec 是危险的,哟:让知道自己在做什么的人在运行脚本之前查看一下您的脚本。

关于linux - Perl + 在 Perl 一行代码中添加警告按摩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com