使用Perl重命名实用程序而不是内置的重命名功能

35
许多网站(包括各种SO文章)都谈到使用Perl表达式使用“rename”重命名文件。这将是完美的,但显然这不是我所拥有的rename实用程序,而且这些文章似乎没有意识到有多个版本的“rename”,我似乎找不到可以接受Perl表达式的版本的位置。我如何才能获得在此处提到的更强大的重命名实用程序hereherehere?我正在运行Fedora 20。我的当前重命名命令来自util-linux包,显然我需要更好的Perl版本。

1
如果您安装了Perl,那么prename也应该是可用的。 - devnull
4
我有perl,但是“man prename”,“prename”和“sudo yum search prename”都没有结果。 - WorldsEndless
脚本本身可以在http://www.perlmonks.org/?node_id=303814找到。 - Prix
1
我已经下载了脚本,修复了插入的换行符,并使用它;它可以正常工作。如果有人能提供一个干净的下载(是否有带man页面的?)以及如何全局使用它而不是编写自己的别名来调用我放置在某处的perl文件,我愿意标记为“已回答”。 - WorldsEndless
如果您的计算机没有root访问权限,这里有一个要点与脚本(必要的换行符已经修复,如@WorldsEndless所述):https://gist.github.com/rocarvaj/6abf7dd1e083963a596430ac43f88e34 - rocarvaj
8个回答

21
我只能代表Debian发言。这两个程序分别叫做:
  • /usr/bin/rename.ul ,来自于util-linux软件包(因此有 .ul 后缀)
  • /usr/bin/prename,来自于perl软件包
实际的rename命令通过/etc/alternatives机制工作,其中:
  • /usr/bin/rename是一个指向/etc/alternatives/rename的符号链接
  • /etc/alternatives/rename是一个指向/usr/bin/prename的符号链接
同样的问题也困扰着我在Cygwin上,它是红帽子公司的产品,所以应该更类似于Fedora。我会在周一检查我的公司笔记本电脑。我记得Perl-rename有时候在那里起作用。可能是在我安装util-linux之前。
如果您将Perl-rename安装到/usr/local/bin,它将优先于util-linux中的rename。当安装到/usr/local/share/man/man1/时,man页也是如此。
我刚刚在Github上创建了一个单独的Perl-rename软件包:https://github.com/subogero/rename

1
看起来很不错。如果您只添加一行,我认为答案将是完整的:如何安装您的git软件包(只需一行关于“sudo make”)。谢谢! - WorldsEndless
2
关于Cygwin,Red Hat拥有核心cygwin1.dll的版权,但只雇佣了一名全职开发人员来开发Cygwin,她(Corinna Vinschen)不负责Cygwin Perl。绝大部分Cygwin工作是由社区志愿者完成的,他们在决策方面没有受到与Fedora相匹配的限制。Cygwin Perl 目前由多人维护,其中没有任何人因为在Cygwin上工作而得到Red Hat的报酬。(Red Hat员工Eric Blake维护perl-error包,但他公开表示他的Cygwin工作是在下班后进行的。) - Warren Young
2
太棒了。而且Cygwin在Windows上已经是最可靠的软件很长时间了。 :-) - SzG
2
如果你想贡献一个 perl-rename 包,我会支持它。你也会注意到我在 Cygwin 包维护者列表上的名字。不过,我并不想创建那个包。当 Bash 一行命令不合适时,我个人选择使用 mmv 进行高级重命名,而且我几乎从来不需要使用它。 - Warren Young

19
您可以使用cpan进行安装,它类似于Python的pip,是Perl仓库。
这里有一个使用cpan的tutorial
如果您尝试运行重命名,则会显示如下内容:

rename --help
call: rename from to files...

要安装Perl重命名,请执行以下操作。您可能需要安装一些依赖项,通常只需按Enter键即可。
以下是关于从cpan安装rename的步骤:

cpan
cpan1> install File::Rename
CPAN: Storable loaded ok (v2.20)
Going to read '/root/.cpan/Metadata'
Database was generated on Wed, 30 Sep 2015 08:17:02 GMT
Running install for module 'File::Rename'
....
Running Build install
Installing /usr/local/share/man/man1/rename.1
Installing /usr/local/share/perl5/File/Rename.pm
Installing /usr/local/share/man/man3/File::Rename.3pm
Installing /usr/local/bin/rename
Writing /usr/local/lib64/perl5/auto/File/Rename/.packlist
RMBARKER/File-Rename-0.20.tar.gz
./Build install -- OK

这就是如何从cpan安装rename的方法。接下来需要在您的系统上使其正常工作,因为可能已经安装了多个重命名程序。
which rename  
/usr/bin/rename  

当您实际需要这个时。
/usr/local/bin/rename --help
Usage:
    rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E *perlexpr*]*|*perlexpr*
    [ *files* ]

Options:
    -v, -verbose
            Verbose: print names of files successfully renamed.

    -n, -nono
            No action: print names of files to be renamed, but don't rename.

    -f, -force
            Over write: allow existing files to be over-written.

    -h, -help
            Help: print SYNOPSIS and OPTIONS.

    -m, -man
            Manual: print manual page.

    -V, -version
            Version: show version number.

    -e      Expression: code to act on files name.

            May be repeated to build up code (like "perl -e"). If no -e, the
            first argument is used as code.

    -E      Statement: code to act on files name, as -e but terminated by
            ';'.

我���是将它放入/usr/bin/,但使用了稍微不同的名称,以确保不会破坏任何依赖于旧名称的现有脚本/程序。
ln -s /usr/local/bin/rename /usr/bin/rename.pl

1
对于我的情况,我需要使用 sudo cpan - 林果皞
1
即使使用 sudo cpan 命令安装,我也没有得到这个脚本。我的系统是 Fedora 24。难道是因为我已经安装了 GitHub 上的答案吗?我已经卸载了它,并且直接引用了 /usr/bin/rename,但是没有得到这个“超级强大”的版本。 - Pysis
1
@Pysis 对我来说它也没有安装rename。但是它确实安装了一个似乎是相同程序的file-rename。编辑:我正在使用Strawberry Perl。 - Andrew Keeton
1
在 openSuse 上运行了这个命令,它替换了现有的 /usr/bin/rename,这不是我想要的,我希望两者都存在。有什么办法可以恢复旧的那个? - EricS

5
在RedHat 8.4上(但可能适用于Fedora)
sudo yum install perl-CPAN
sudo cpan
install module::Build
install File::Rename

你可以创建一个别名:
alias prename='/usr/local/bin/rename'

一个例子:
touch pic.jpeg
prename 's/\.jpeg$/.jpg/' *.jpeg

在这里,您可以创建一个扩展名为.jpeg的空文件。下一行将重命名当前目录中所有扩展名为.jpeg的文件:它会从这些文件的jpeg扩展名中删除e。(第一行是为了确保目录中至少有一个这样的文件。)
(在Debian/Ubuntu上,您可以安装rename软件包,然后您将拥有与上面的prename相同的rename命令。还请阅读SzG关于替代方案和符号链接的回答:可能并不像我写的那么简单。)
或者,您需要安装libpath-tiny-perl软件包来安装CPAN。

4

我必须执行以下操作:

# In bash
sudo yum install perl-CPAN
sudo cpan

# In CPAN shell
install Module::Build
install File::Rename

2

对于Arch Linux来说,它的

sudo pacman -S perl-rename

1

对于 Debian 家族 (.deb) 的发行版,我建议使用 @SzG 的 answer

对于 RedHat 家族 (.rpm) 的发行版(例如 Fedora),如果你的时间很宝贵(像我一样),你可以通过 cpan 以一条简洁的命令从源代码编译和安装。

# Install (replace `rename-1.9` below with another version if desired)
curl -L "http://search.cpan.org/CPAN/authors/id/P/PE/PEDERST/rename-1.9.tar.gz" | tar -xz && ( cd "rename-1.9"; perl "Makefile.PL"; make && make install )

# Cleanup
rm -rf "rename-1.9"

注意:

INSTALL_BASE 可以设置来修改基本安装目录。

例如: perl "Makefile.PL" INSTALL_BASE=/usr/local

source


2
对于 RedHat 家族的发行版,您应该可以直接使用 yum install prename 命令进行安装。'prename' 软件包位于 EPEL 软件源中。 - pjh

1
我创建了一个关于Perl的重命名在许多发行版中的帖子:

https://unix.stackexchange.com/a/727288/12574

  • rpm基于的发行版:
    • dnf install prename
  • archlinux
    • pacman -S perl-rename
  • *BSD
    • pkg install p5-File-Rename
  • Debian类/Ubuntu
    • apt install rename
  • slackware

-1

最近我不得不在Docker容器中的Alpine Linux上安装Perl rename软件包,以进行Gitlab CI/CD操作:

apk update
apk add --no-cache make perl-utils
cpan File::Rename

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接