--backup[=CONTROL]
make a backup of each existing destination file
-b like --backup but does not accept an argument
-f, --force
do not prompt before overwriting
-i, --interactive
prompt before overwrite
-n, --no-clobber
do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
--strip-trailing-slashes
remove any trailing slashes from each SOURCE argument
-S, --suffix=SUFFIX
override the usual backup suffix
-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
-T, --no-target-directory
treat DEST as a normal file
-u, --update
move only when the SOURCE file is newer than the destination file or when the destination file is missing
-v, --verbose
explain what is being done
-Z, --context
set SELinux security context of destination file to default type
重命名选项(省略帮助和版本)
-s, --symlink
Do not rename a symlink but its target.
-v, --verbose
Show which files where renamed, if any.
-n, --no-act
Do not make any changes.
-o, --no-overwrite
Do not overwrite existing files.
对于两者来说,基本上都是盖子上所说的。
mv
是将一个或多个文件移动到给定目标的标准实用程序。如果只有一个文件要移动,它可用于重命名文件。如果有多个,mv
仅当目标是目录时才有效,并将文件移动到那里。因此
mv foo bar
,要么将文件移动foo
到目录bar
(如果存在),要么重命名foo
为bar
(如果bar
不存在或不是目录)。mv foo1 foo2 bar
只会将两个文件移动到 directorybar
,或者如果bar
不是目录则抱怨。mv
将调用rename()
C 库函数来移动文件,如果这不起作用(它们正在被移动到另一个文件系统),它将复制文件并删除原件。如果您只有
mv
并且想要重命名多个文件,则必须使用 shell 循环。网站上有很多关于此的问题,请参见例如this、this和其他。另一方面,各种
rename
实用程序分别重命名文件。您提到的
rename
from util-linux进行了简单的字符串替换,例如rename foo bar *
将更foobar
改为barbar
和asdffoo
。但是,它不采用正则表达式!asdfbar
Perl 重命名实用程序(或它的各种实例)采用 Perl 表达式来转换文件名。人们很可能会使用一个命令,其中模式是一个正则表达式。
s/pattern/replacement/
util-linux rename 和 Perl rename 都可以通过对文件名进行适当的更改来同时将文件移动到另一个目录,但是有点尴尬。两者都只是调用
rename()
文件,因此从一个文件系统移动到另一个文件系统是行不通的。至于
rename
您拥有哪些,可能取决于您的发行版和/或您安装的内容。他们中的大多数都支持rename --version
,因此请使用它来确定您拥有哪一个。MV
这是一个基本的命令行,旨在做一件事并做好(Unix哲学):移动文件或目录。
您可以破解
STDOUT
&STDIN
¹ 来动态修改目标字符串,但这不是一个聪明的破解重命名(Perl 的一个)
还有其他同名的工具可能会也可能不会这样做,所以要小心。
当人们谈论 时
rename
,我们想到的是这个,而不是那个ELF
不那么强大的(魔法?)。它不是基本的,它是 Perl。你可以在里面传递一些 Perl 的函数,它非常强大。
考虑这个例子:
你想重命名一堆文件,比如
您可以像这样在数字前添加零
sprintf()
(使用正则表达式,嘿,它是 Perl :D ):现在你有:
不是真正的基本命令,不是吗?
rename并不是真正设计用于移动 dir(s),但它可以做到:
移动的文件
¹ 我们在
*.stackexchange.*
网站上看到的一些代码这不是要走的路,它很简单,只是为了解释为什么在正确的时刻使用正确的工具
mv
只需更改文件的名称(它也可以将其移动到另一个文件系统或路径)。您给它一个旧名称和一个新名称,它会将文件更改为新名称或位置。rename
用于进行批量命名更改。假设您有一千个文件,
foo000.log
通过foo999.log
并且您想将它们更改为bar000.log
throughbar999.log
。mv
你必须做mv foo000.log bar000.log
,等,mv foo001 bar001.log
否则写一个脚本。只需
rename
您这样做rename foo bar foo*.log
,瞧,一千个文件瞬间改变!很酷。再次查看
man rename
页面了解详情。mv移动或重命名文件和目录并将它们备份;rename只是重命名文件。
mv有更多的功能和选择。查看每个手册页中的开关,以了解功能上的差异。让我们看一下在 Ubuntu 18.04LTS 中使用man(你的里程可能会因每个包的版本而异):
mv 选项(省略帮助和版本)
重命名选项(省略帮助和版本)