初学者解释Linux mv命令(8个例子)
就像cp复制和rm删除一样,Linux也提供了一个用于移动和重命名文件的内置命令。 这就是所谓的mv 。 在本文中,我们将使用易于理解的示例来讨论此命令行工具的基础知识。 请注意,本教程中使用的所有示例都已在Ubuntu 16.04 LTS上进行了测试。
Linux mv命令
如前所述,Linux中的mv命令用于移动或重命名文件。 以下是该命令的语法:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
以下是手册页上所说的内容:
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
下面的Q&A样式的例子会给你一个关于这个工具如何工作的更好的想法。
Q1。 如何在Linux中使用mv命令?
如果您只想重命名一个文件,您可以按以下方式使用mv命令:
mv [filename] [new_filename]
例如:
mv names.txt fullnames.txt
同样,如果要求将文件移动到新位置,请按以下方式使用mv命令:
mv [filename] [dest-dir]
例如:
mv fullnames.txt /home/himanshu/Downloads
Q2。 如何确保mv提示覆盖之前?
默认情况下,当操作涉及覆盖现有文件时,mv命令不会提示。 例如,以下屏幕截图显示了现有的full_names.txt被mv覆盖,没有任何警告或通知。
但是,如果需要,可以使用-i命令行选项强制mv进行提示。
mv -i [file_name] [new_file_name]
所以上面的截图清楚地显示了-i导致mv在覆盖现有文件之前要求用户许可。 请注意,如果您想明确指定不希望mv在覆盖之前提示,请使用-f命令行选项。
Q3。 如何使mv不覆盖现有的文件?
为此,您需要使用-n命令行选项。
mv -n [filename] [new_filename]
以下屏幕截图显示mv操作未成功,因为名称为“full_names.txt”的文件已经存在,并且命令中有-n选项。
注意:
If you specify more than one of -i, -f, -n, only the final one takes effect.
Q4。 如何使mv从源码参数中删除尾随斜杠(如果有的话)?
要从源参数中删除任何结尾的斜线,请使用--strip-trailing-slashes命令行选项。
mv --strip-trailing-slashes [source] [dest]
以下是官方文档如何解释这个选项的用处:
This is useful when a source argument may have a trailing slash and specify a symbolic link to a directory. This scenario is in fact rather common because some shells can automatically append a trailing slash when performing file name completion on such symbolic links. Without this option, mv
, for example, (via the system’s rename function) must interpret a trailing slash as a request to dereference the symbolic link and so must rename the indirectly referenced directory and not the symbolic link. Although it may seem surprising that such behavior be the default, it is required by POSIX and is consistent with other parts of that standard.
Q5。 如何使mv作为普通文件处理目的地?
要绝对确保目标实体被视为普通文件(而不是目录),请使用-T命令行选项。
mv -T [source] [dest]
这就是为什么这个命令行选项存在:
This can help avoid race conditions in programs that operate in a shared area. For example, when the command ‘mv /tmp/source /tmp/dest’ succeeds, there is no guarantee that /tmp/source was renamed to /tmp/dest: it could have been renamed to/tmp/dest/source instead, if some other process created /tmp/dest as a directory. However, if mv -T /tmp/source /tmp/dest succeeds, there is no question that/tmp/source was renamed to /tmp/dest.
In the opposite situation, where you want the last operand to be treated as a directory and want a diagnostic otherwise, you can use the --target-directory (-t) option.
Q6。 只有当它比目标文件更新时,如何使mv移动文件?
假设在您的系统的Downloads目录中存在一个名为fullnames.txt的文件,并且在您的主目录中有一个具有相同名称的文件。 现在,你想用〜/ fullnames.txt更新〜/ Downloads / fullnames.txt,但是只有当后者更新的时候。 那么在这种情况下,你将不得不使用-u命令行选项。
mv -u ~/fullnames.txt ~/Downloads/fullnames.txt
这个选项在需要从shell脚本中做出这样的决定的情况下特别有用。
Q7。 如何使mv发出所有正在做的事情的细节?
如果你想mv输出信息来解释它到底在做什么,那么使用-v命令行选项。
mv -v [filename] [new_filename]
例如,下面的屏幕截图显示了mv发出了一些有用的细节。
Q8。 如何强制mv创建现有目标文件的备份?
这可以使用-b命令行选项。 以这种方式创建的备份文件将与目标文件具有相同的名称,但附加了波形符号(〜)。 这是一个例子:
结论
正如你现在猜测的那样,mv与cp和rm对于它所提供的功能同样重要 - 重命名/移动文件也是最基本的操作之一。 我们已经讨论了这个工具提供的大部分命令行选项。 所以你可以练习它们并开始使用命令。 要了解更多有关mv的信息,请转到手册页 。