mv (移动并重命名文件和目录)

rose1 发表于 2020-10-10 09:15
浏览次数:
在手机上阅读

在Linux操作系统上,mv命令移动并重命名文件和目录。

查看英文版

目录

1 mv 运行系统环境

2 mv 语法

3 mv 例子

mv 运行系统环境

Linux

mv 语法

将名为source的文件重命名为destination:

mv [options] [-T] source destination

将源文件移动到名为destination的目录:

mv [options] source [source2 ...] destination

与先前的语法相同,但首先指定目录,最后指定源文件:

mv [options] -t destination source [source2 ...]

选件

--backup[=vcm] 使用版本控制方法vcm备份每个现有目标文件。如果VCM被省略,--backup的行为一样-b(备份的创建,使用默认的版本控制方法)。
-b --backup类似,但不接受备份方法。而是使用VERSION_CONTROL环境变量指定的方法。如果未设置变量,则创建简单备份。
-f--force 始终覆盖现有文件,而不提示。如果您需要覆盖权限为只读的多个文件,这将很有用;如果未指定-f,则将提示您输入每个文件。
-i--interactive 无论文件的权限如何,在覆盖现有文件之前都会提示您。
-n--no-clobber 切勿覆盖任何现有文件。

注意:如果您指定了以上选项-i,-f-n中的多个选项,则只有您指定的最后一个选项才生效。

--strip-trailing-斜杠 删除每个源参数中的所有尾部斜杠。
-S--suffix=后缀 指定要用于所有备份文件的文件名后缀。默认值为“ 〜 ”。
-t--target-directory=目标 将所有源移动到目录目标中。
-T--no-target-directory 将目标视为普通文件,而不是目录。
-u--update 如果文件较新,请不要覆盖它们。仅当目标文件早于源文件或目标文件不存在时,才会发生移动。
-v--verbose 提供详细的输出。打印每个移动文件的名称。
--help 显示帮助消息,然后退出。
--版本 显示版本信息,然后退出。

备份档案

如果使用-b--backup选项,则mv将重命名目标文件(如果存在),并在文件名后附加后缀。这将保存原始文件的副本,而不是覆盖它。

备份有两种类型:简单备份编号备份。

  • 简单备份将删除现有的备份文件(如果已存在)。仅保留一个备份文件。“简单”备份的默认后缀是波浪号(“ 〜 ”)。您可以使用--suffix选项或通过设置SIMPLE_BACKUP_SUFFIX 环境变量来更改此后缀。例如,file.txt将备份为file.txt〜。
  • 带编号的备份会保留现有的备份文件,并以文件名中的数字递增创建其他备份。没有备份文件被删除。对于编号备份后缀是“〜N〜 ”,其中N是一个整数。例如,file.txt的将被备份为file.txt的。〜1〜 ,然后file.txt的。〜2〜 ,

版本控制方法

提供了用于创建备份文件的其他规则,称为版本控制方法。可以使用--backup选项或通过设置环境变量VERSION_CONTROL来指定版本控制方法。方法是:

方法名称 描述
没有关闭 即使给出了--backup选项,也不要进行备份。
编号t 进行编号备份。
现有的 编号,如果已经存在编号的备份,简单的说明。
简单永不 始终进行简单的备份。

Rename a file named source to destination:

mv [options] [-T] source destination

Move source file(s) to a directory named destination:

mv [options] source [source2 ...] destination

Same as the previous syntax, but specifying the directory first, and the source file(s) last:

mv [options] -t destination source [source2 ...]

Options

--backup[=vcm] Make a backup of each existing destination file, using the version control method vcm. If vcm is omitted, --backup behaves the same as -b (backups are created, using the default version control method). See Backing up files for details.
-b Like --backup, but does not accept a backup method. Instead, the method specified by the VERSION_CONTROL environment variable is used. Simple backups are created if the variable is not set. See version control methods for details.
-f--force Always overwrite existing files without prompting. This can be useful if you need to overwrite multiple files whose permissions are read-only; if you don't specify -f, you will be prompted for every file.
-i--interactive Prompt before overwriting an existing file, regardless of the file's permissions.
-n--no-clobber Never overwrite any existing file.

Note: If you specify more than one of the above options -i-f, or -n, only the final option you specify takes effect.

--strip-trailing-slashes Remove any trailing slashes from each source argument.
-S--suffix=suffix Specify the file name suffix to be used for all backup files. The default is "~".
-t--target-directory=destination Move all sources into the directory destination.
-T--no-target-directory Treat destination as a normal file, not as a directory.
-u--update Don't overwrite files if they're newer. A move will only happen if the destination file is older than the source file, or the destination file does not already exist.
-v--verbose Provide verbose output. Print the name of every file moved.
--help Display a help message, and exit.
--version Display version information, and exit.

Backing up files

If you use the -b or --backup options, mv will rename the destination file if it exists, appending a suffix to its file name. This saves a copy of the original file instead of overwriting it.

There are two types of backups: simple and numbered.

  • Simple backups delete an existing backup file if it already exists. Only one backup file is kept. The default suffix for "simple" backups is a tilde("~"). You can change this suffix with the --suffix option, or by setting the SIMPLE_BACKUP_SUFFIX environment variable. For example, file.txt would be backed up as file.txt~.
  • Numbered backups keep existing backup files, creating additional backups with an incrementing number in the file name. No backup files are deleted. The suffix for numbered backups is ".~n~", where n is an integer. For example, file.txt would be backed up as file.txt.~1~, then file.txt.~2~, etc.

Version control methods

Additional rules for creating backup files are available, called version control methods. The version control method may be specified with the --backup option, or by setting the environment variable, VERSION_CONTROL. The methods are:

Method name Description
noneoff Never make backups, even if the --backup option is given.
numberedt Make numbered backups.
existingnil numbered if numbered backups already exist, simple otherwise.
simplenever Always make simple backups.

查看英文版

查看中文版

mv 例子

mv myfile.txt myfiles

将文件myfile.txt移到目录myfiles中。如果myfiles是文件,它将被覆盖。如果文件被标记为只读,但是您是该文件的所有者,则将在覆盖之前提示您。

mv myfiles myfiles2

如果myfiles是文件或目录,而myfiles2是目录,则将myfiles移到myfiles2中。如果myfiles2不存在,则将文件或目录myfiles重命名为myfiles2。

mv myfile.txt ../

将文件myfile.txt移到当前目录的父目录中。

mv -t myfiles myfile1 myfile2

将文件myfile1myfile2移到目录myfiles中。

mv myfile1 myfile2 myfiles

与上一个命令相同。

mv -n file file2

如果file2存在并且是目录,则将文件移入其中。如果file2不存在,则将文件重命名为file2。如果file2存在并且是文件,则什么都不会发生。

mv -f file file2

如果file2存在并且是文件,它将被覆盖。

mv -i file file2

如果file2存在并且是文件,则提示:

mv: overwrite 'file2'?

输入“ y”,“是”,“是”或“ Y”将导致文件被覆盖。其他任何输入都会跳过该文件。

mv -fi file file2

mv -i相同。覆盖前提示。该 f 选项被忽略。

mv -if file file2

mv -f相同。无提示覆盖。在 i 选项被忽略。

mv My\ file.txt My\ file\ 2.txt

将文件“ My file.txt ”重命名为“ My file 2.txt ”。这里,文件名中的空格被转义,从而防止它们被解释为命令的一部分。

mv "My file.txt" "My file 2.txt"

与上一个命令相同。

mv "My file.txt" myfiles

该命令的结果:

  • 如果myfiles是目录,则将My file.txt移动到myfiles中。
  • 如果myfiles是文件,则My file.txt将重命名为myfiles,而原始myfiles将被覆盖。
  • 如果myfiles不存在,则将My file.txt重命名为myfiles。
mv My*.txt myfiles

在这里,*是通配符,表示“任何字符的任何数字,包括零”。

  • 如果myfiles是目录:所有扩展名为.txt(名称以My开头)的文件都将移入myfiles。
  • 如果myfiles不存在或不是目录,则mv报告错误,并且不执行任何操作。
my My\ file??.txt myfiles

在这里,是一个通配符,表示“零或任何字符之一”。它使用了两次,因此最多可以匹配两个字符。

  • 如果myfiles是目录:名称为My file.txt之间的零,一或两个字符的任何文件都将移入myfiles。
  • 如果myfiles不存在或不是目录,则mv报告错误,并且不执行任何操作。

进行备份

mv -b file file2

如果存在file2,它将重命名为file2〜。

mv -b --suffix=.bak file file2

如果存在file2,它将被重命名为file2.bak。

mv --backup=numbered; mv file file2

如果存在file2,它将被重命名为file2。〜1〜。如果文件2。〜1〜存在,它将被重新命名file2。〜2〜等等。

VERSION_CONTROL=numbered mv -b file file2

与上一个命令相同。环境变量仅为此命令定义。

export VERSION_CONTROL=numbered; mv -b file file2

通过出口的VERSION_CONTROL环境变量中,所有MV -b当前会话将使用编号备份命令。

export VERSION_CONTROL=numbered; mv file file2

即使设置了VERSION_CONTROL变量,由于未指定-b(或--backup),因此不会创建任何备份。如果存在file2,则它将被覆盖。

使用正则表达式重命名文件

mv不解释正则表达式(regex)。

如果您需要重命名多个文件,使用旧复杂或细致入微映射到新的文件名,你应该使用重命名命令。

重命名接受perl正则表达式。例如:

rename 's/My\ file(..)/document$1/' My*

此命令会将文件My file.txtMy file 2.txt重命名为document.txtdocument 2.txt。

mv myfile.txt myfiles

Move the file myfile.txt into the directory myfiles. If myfiles is a file, it will be overwritten. If the file is marked as read-only, but you own the file, you will be prompted before overwriting it.

mv myfiles myfiles2

If myfiles is a file or directory, and myfiles2 is a directory, move myfiles into myfiles2. If myfiles2 does not exist, the file or directory myfiles is renamed myfiles2.

mv myfile.txt ../

Move the file myfile.txt into the parent directory of the current directory.

mv -t myfiles myfile1 myfile2

Move the files myfile1 and myfile2 into the directory myfiles.

mv myfile1 myfile2 myfiles

Same as the previous command.

mv -n file file2

If file2 exists and is a directory, file is moved into it. If file2 does not exist, file is renamed file2. If file2 exists and is a file, nothing happens.

mv -f file file2

If file2 exists and is a file, it will be overwritten.

mv -i file file2

If file2 exists and is a file, a prompt is given:

mv: overwrite 'file2'?

Entering "y", "yes", "Yes", or "Y" will result in the file being overwritten. Any other input will skip the file.

mv -fi file file2

Same as mv -i. Prompt before overwriting. The f option is ignored.

mv -if file file2

Same as mv -f. Overwrite with no prompt. the i option is ignored.

mv My\ file.txt My\ file\ 2.txt

Rename the file "My file.txt" to "My file 2.txt". Here, the spaces in the file name are escaped, protecting them from being interpreted as part of the command.

mv "My file.txt" "My file 2.txt"

Same as the previous command.

mv "My file.txt" myfiles

The result of this command:

  • If myfiles a directory, My file.txt is moved into myfiles.
  • If myfiles a file, My file.txt is renamed myfiles, and the original myfiles is overwritten.
  • If myfiles does not exist, My file.txt is renamed myfiles.
mv My*.txt myfiles

Here, * is a wildcard meaning "any number, including zero, of any character."

  • If myfiles is a directory: all files with the extension .txt, whose name begins with My, will be moved into myfiles.
  • If myfiles does not exist or is not a directory, mv reports an error and does nothing.
my My\ file??.txt myfiles

Here, ? is a wildcard that means "zero or one of any character." It's used twice, so it can match a maximum of two characters.

  • If myfiles is a directory: any file with zero, one, or two characters between My file and .txt in their name is moved into myfiles.
  • If myfiles doesn't exist, or is not a directory, mv reports an error and does nothing.

Making backups

mv -b file file2

If file2 exists, it will be renamed to file2~.

mv -b --suffix=.bak file file2

If file2 exists, it will be renamed to file2.bak.

mv --backup=numbered; mv file file2

If file2 exists, it will be renamed file2.~1~. If file2.~1~ exists, it will be renamed file2.~2~, etc.

VERSION_CONTROL=numbered mv -b file file2

Same as previous command. The environment variable is defined for this command only.

export VERSION_CONTROL=numbered; mv -b file file2

By exporting the VERSION_CONTROL environment variable, all mv -b commands for the current session will use numbered backups.

export VERSION_CONTROL=numbered; mv file file2

Even though the VERSION_CONTROL variable is set, no backups are created because -b (or --backup) was not specified. If file2 exists, it is overwritten.

Renaming files using regular expressions

mv does not interpret regular expressions (regex).

If you need to rename many files, using a complex or nuanced mapping from old to new file names, you should use the rename command instead.

rename accepts perl regular expressions. For example:

rename 's/My\ file(..)/document$1/' My*

This command will rename files My file.txt and My file 2.txt to document.txt and document 2.txt.

查看英文版

查看中文版

其他命令行

mail | mailcompat | merge | mesg | mii-tool | mkdir | mach |

如此好文,分享给朋友