首页>Program>source

我该怎么做 不用重新输入原始文件名?

我想能够做像 mv original.filename new.original.filename这样的事情 也许是 mv -p=new. original.filename 等等-但是看了 mv original.filename new.~之后我看不到任何类似的东西 / man mv 页面。

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

info mv
最新回答
  • 2021-1-9
    1 #

    在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
    

  • 2021-1-9
    2 #

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

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

    Edit: 如果重命名不可用,并且您必须重命名多个文件,则为此,shell脚本确实很简短.例如,将当前目录中的所有.jpg重命名为prefix _.jpg:

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

  • 2021-1-9
    3 #

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

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

  • 2021-1-9
    4 #

    我已经看到人们提到了一个 rename 命令,但在Unix系统上通常无法使用(例如,与Linux系统或Cygwin相对,在这两种系统上,重命名都是可执行文件而不是脚本).那个版本的 rename 具有相当有限的功能:

    rename from to file ...
    

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

    rename foo foo0 foo? foo??
    

    这会将foo1重命名为foo01,并将foo10重命名为foo010,等等。

    我使用一个叫做 rename的Perl脚本 ,我最初是从第一版骆驼书(大约在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 ([email protected]) {
        @ARGV = <STDIN>;
        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
    

  • 2021-1-9
    5 #

    批量重命名目录中文件的最简单方法是:

    ls | xargs -I fileName mv fileName fileName.suffix
    

相关问题

  • r:如何在ggplot2的构面中添加常规标签?
  • language agnostic:使用很多静态方法是一件坏事吗?