获取 Perl 重命名实用程序而不是内置的重命名

Posted

技术标签:

【中文标题】获取 Perl 重命名实用程序而不是内置的重命名【英文标题】:Get the Perl rename utility instead of the built-in rename 【发布时间】:2014-04-29 22:37:00 【问题描述】:

许多网站(包括各种 SO 文章)都在谈论使用 Perl 表达式“重命名”来重命名文件。

这将是完美的,但显然这不是我拥有的重命名实用程序,而且这些文章似乎都没有理解“重命名”有多个版本,我似乎无法找到从哪里获得接受的版本Perl 表达式。

我怎样才能使用提到的更强大的重命名实用程序 here、here 和 here?

我正在运行 Fedora 20。我当前的重命名命令来自 util-linux 包,显然我需要更好的 Perl 版本。

【问题讨论】:

如果你有 perl,它也应该是prename @devnull 我有 perl,但 man prenameprenamesudo yum search prename 都空手而归。 脚本本身可以在perlmonks.org/?node_id=303814找到 我已经下载了脚本,修复了插入的换行符,并使用了它;它工作正常。如果有人可以进行干净的下载(是否有手册页?)以及如何在全球范围内使用它而不是编写自己的别名来访问我卡在某个地方的 perl 文件,我愿意标记“已回答”。 如果您的机器没有 root 访问权限,这里有一个脚本要点(修复了必要的换行符,如 @WorldsEndless 所述):gist.github.com/rocarvaj/6abf7dd1e083963a596430ac43f88e34 【参考方案1】:

对于 Arch Linux,它的

sudo pacman -S perl-rename

【讨论】:

【参考方案2】:

在 RedHat 8.4 上

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

【讨论】:

【参考方案3】:

我只能代表 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 上也遇到了同样的问题,它是一个 Red Hat 产品,所以应该更类似于 Fedora。星期一我会看看我公司的笔记本电脑。我记得 Perl-rename 有时在那里工作过。可能在我安装util-linux之前。

如果您将 Perl 重命名为 /usr/local/bin,它将优先于 util-linux 中的 rename。安装到 /usr/local/share/man/man1/ 时的手册页也是如此。

我刚刚在 Github 上创建了一个单独的 Perl 重命名包:https://github.com/subogero/rename

【讨论】:

看起来不错。如果您只添加一行,我认为答案将是完整的:如何安装您的 git 包(只是关于“sudo make”的一行)。谢谢! 回复:Cygwin,Red Hat 拥有核心 cygwin1.dll 的版权,但只支付了一名全职开发人员在 Cygwin 上的工作,而她 (Corinna Vinschen) 不在 Cygwin Perl 上工作。 Cygwin 的绝大多数工作都是由社区志愿者完成的,他们不受限制地做出与 Fedora 匹配的决定。 Cygwin Perl is currently maintained 由几个人组成,他们都没有得到红帽的报酬来为 Cygwin 工作。 (Red Hat 员工 Eric Blake 维护 perl-error 软件包,但他公开表示他的 Cygwin 工作已下班。) 太棒了。 Cygwin 多年来一直是 Windows 上最可靠的软件。 :-) 如果你想贡献一个perl-rename 包,我会支持它。您也会在 Cygwin 软件包维护者列表中注意到我的名字。不,我不想创建那个包。我个人的花哨重命名选择——当 Bash 单行不合适时——是mmv,我几乎不需要使用它。【参考方案4】:

对于 Debian 系列 (.deb) 发行版,我推荐 @SzG 的 answer。

对于 RedHat-family (.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

【讨论】:

对于 RedHat 系列发行版,您应该可以只使用 yum install prename。 'prename' 包位于 EPEL 存储库中。【参考方案5】:

我必须做到以下几点:

# In bash
sudo yum install perl-CPAN
sudo cpan

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

【讨论】:

【参考方案6】:

您可以使用cpan 安装它,这是类似于python 的pip 的perl 存储库。

这是关于使用 cpan 的tutorial。

如果你尝试运行 rename 它看起来像这样

重命名 --help 调用:重命名为文件...

要安装 perl 重命名,您可以执行以下操作。可能需要安装一些依赖,一般直接回车即可

cpan cpan1> 安装文件::重命名 CPAN:可存储加载正常 (v2.20) 正在阅读“/root/.cpan/Metadata” 数据库于格林威治标准时间 2015 年 9 月 30 日星期三 08:17:02 生成 为模块“文件::重命名”运行安装 .... 运行构建安装 安装 /usr/local/share/man/man1/rename.1 安装 /usr/local/share/perl5/File/Rename.pm 安装 /usr/local/share/man/man3/File::Rename.3pm 安装 /usr/local/bin/rename 编写 /usr/local/lib64/perl5/auto/File/Rename/.packlist RMBARKER/File-Rename-0.20.tar.gz ./Build install -- OK

这就是您从 cpan 安装重命名的方式。 接下来是让它在您的系统上运行。因为您可能安装了多个重命名。

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

【讨论】:

就我而言,我需要sudo cpan 即使sudo cpan 和安装都没有给我这个脚本。 Fedora 24. 是不是因为我已经安装了 GitHub 答案?我已经卸载了那个,也直接引用了/usr/bin/rename,但是没有得到这个“超强”版本。 @Pysis 它也没有为我安装rename。它确实安装了一个似乎是同一个程序的file-rename。编辑:我正在使用草莓 Perl。 在 openSuse 上运行它,它取代了现有的 /usr/bin/rename 这不是我想要的,我想要两者兼而有之。知道如何找回旧的吗?

以上是关于获取 Perl 重命名实用程序而不是内置的重命名的主要内容,如果未能解决你的问题,请参考以下文章

COM Interop的重命名/前缀类

将我的程序与 Windows 资源管理器的重命名事件挂钩

想不到一个简单的重命名,在git中也有这么多学问

想不到一个简单的重命名,在git中也有这么多学问

重命名核心数据实体而不丢失数据

关于 java 重命名文件夹的问题?