当前位置:  开发笔记 > 编程语言 > 正文

如何用前缀/后缀重命名?

如何解决《如何用前缀/后缀重命名?》经验,为你挑选了4个好方法。

如何在mv original.filename new.original.filename不重新输入原始文件名的情况下进行操作?

我会想象能够做这样的事情mv -p=new. original.filename或者是mv original.filename new.~或什么-但看后,我看不出这样的事情man mv/ info mv页.

当然,我可以编写一个shell脚本来执行此操作,但是不存在现有的命令/标志吗?



1> Simon Lehman..:

您可以使用rename(1)命令:

rename 's/(.*)$/new.$1/' original.filename

编辑:如果重命名不可用,并且您必须重命名多个文件,那么shell脚本可以简单而简单.例如,要将当前目录中的所有.jpg重命名为prefix_ .jpg:

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;


到目前为止,这是最好的答案.

2> Dave Webb..:

在Bash和zsh中,您可以使用Brace Expansion执行此操作.这只是扩展大括号中的项目列表.例如:

# echo {vanilla,chocolate,strawberry}-ice-cream
vanilla-ice-cream chocolate-ice-cream strawberry-ice-cream

所以你可以按如下方式重命名:

mv {,new.}original.filename

因为这扩展到:

mv original.filename new.original.filename


这不做的是使用外卡.也就是说,在包含文件名a,b,c的目录中,使用"echo {,new.}*"产生列表"abc new.*"(因为通过大括号扩展生成文件名在扩展通配符之前发生 - 至少通过推论).

3> 小智..:

您可以通过创建for循环来实现与unix兼容的多文件重命名(使用通配符):

for file in *; do
  mv $file new.${file%%}
done


这与[Simon Lehmann已经回答的](http://stackoverflow.com/questions/208181/how-to-rename-with-prefix-suffix#208220)有什么区别?
这非常有效.什么```$ {file %%}```做什么?看起来类似于$ {file}

4> Jonathan Lef..:

我见过人们提到了一个rename命令,但在Unix系统上并不是常规可用的(而不是Linux系统,比如说,或者Cygwin - 在这两个系统上,重命名是可执行文件而不是脚本).该版本的rename功能相当有限:

rename from to file ...

它用to替换文件名的from部分,手册页中给出的示例是:

rename foo foo0 foo? foo??

这将foo1重命名为foo01,将foo10重命名为foo010等.

我使用一个名为Perl的脚本rename,我最初从第一版Camel书中挖出,大约在1992年,然后扩展,重命名文件.

#!/bin/perl -w
#
# @(#)$Id: rename.pl,v 1.7 2008/02/16 07:53:08 jleffler Exp $
#
# Rename files using a Perl substitute or transliterate command

use strict;
use Getopt::Std;

my(%opts);
my($usage) = "Usage: $0 [-fnxV] perlexpr [filenames]\n";
my($force) = 0;
my($noexc) = 0;
my($trace) = 0;

die $usage unless getopts('fnxV', \%opts);

if ($opts{V})
{
    printf "%s\n", q'RENAME Version $Revision: 1.7 $ ($Date: 2008/02/16 07:53:08 $)';
    exit 0;
}
$force = 1 if ($opts{f});
$noexc = 1 if ($opts{n});
$trace = 1 if ($opts{x});

my($op) = shift;
die $usage unless defined $op;

if (!@ARGV) {
    @ARGV = ;
    chop(@ARGV);
}

for (@ARGV)
{
    if (-e $_ || -l $_)
    {
        my($was) = $_;
        eval $op;
        die $@ if $@;
        next if ($was eq $_);
        if ($force == 0 && -f $_)
        {
            print STDERR "rename failed: $was - $_ exists\n";
        }
        else
        {
            print "+ $was --> $_\n" if $trace;
            print STDERR "rename failed: $was - $!\n"
                unless ($noexc || rename($was, $_));
        }
    }
    else
    {
        print STDERR "$_ - $!\n";
    }
}

这允许您编写任何Perl替换或音译命令来映射文件名.在请求的具体示例中,您将使用:

rename 's/^/new./' original.filename

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有