我该怎么做 不用重新输入原始文件名?
我想能够做像
mv original.filename new.original.filename
这样的事情
也许是
mv -p=new. original.filename
等等-但是看了
mv original.filename new.~
之后我看不到任何类似的东西
/
man mv
页面。
当然,我可以编写一个shell脚本来执行此操作,但是它没有现成的命令/标志吗?
info mv
最新回答
- 2021-1-91 #
- 2021-1-92 #
您可以使用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-93 #
您可以通过创建for循环来实现与UNIX兼容的多个文件重命名(使用通配符):
for file in *; do mv $file new.${file%%} done
- 2021-1-94 #
我已经看到人们提到了一个
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-95 #
批量重命名目录中文件的最简单方法是:
ls | xargs -I fileName mv fileName fileName.suffix
在Bash和zsh中,您可以使用Brace Expansion来执行此操作.这只是在括号中扩展了项目列表.例如:
因此,您可以按照以下步骤进行重命名:
随着它扩展到: