Linux中的mv命令
mv是Linux中必须知道的命令之一。
mv代表移动,本质上用于将文件或者目录从一个位置移动到另一位置。
语法类似于Linux中的cp命令,但是这两个命令之间存在一个根本区别。
我们可以将cp命令视为复制粘贴操作。
而mv命令可以等同于剪切粘贴操作。
也就是说,当我们在文件或者目录上使用mv命令时,该文件或者目录将移至新位置,并且源文件/目录已不存在。
这就是剪切粘贴操作,不是吗?
cp命令=复制并粘贴
mv命令=剪切并粘贴
mv命令也可用于重命名文件。
使用mv命令非常简单,如果我们了解一些选择,它将变得更好。
mv命令的7个实际示例
让我们来看一些mv命令的有用示例。
1.如何将文件移动到其他目录
第一个也是最简单的示例是移动文件。
为此,我们只需要指定源文件和目标目录或者文件即可。
mv source_file target_directory
此命令将移动source_file并将其放置在target_directory中。
2.如何移动多个文件
如果要一次移动多个文件,只需将所有文件提供给move命令,然后再提供目标目录。
mv file1.txt file.2.txt file3.txt target_directory
我们还可以使用glob移动与模式匹配的多个文件。
例如,在上面的示例中,除了单独提供所有文件之外,我们还可以使用将所有文件扩展名为.txt的glob并将其移动到目标目录。
mv *.txt target_directory
3.如何重命名文件
mv命令的一项基本用途是重命名文件。
如果使用mv命令并在目标中指定文件名,则源文件将重命名为target_file。
mv source_file target_directory/target_file
在上面的示例中,如果target_fille在target_directory中不存在,它将创建target_file。
但是,如果target_file已经存在,它将在不询问的情况下将其覆盖。
这意味着现有目标文件的内容将与源文件的内容一起更改。
在本教程的后面,将介绍如何使用mv命令覆盖文件。
我们没有义务提供目标目录。
如果我们未指定目标目录,则文件将被重命名并保存在同一目录中。
注意:默认情况下,如果目标文件已存在,则mv命令会覆盖。
可以使用-n或者-i选项更改此行为,稍后将进行说明。
4.如何在Linux中使用mv命令移动目录
我们也可以使用mv命令移动目录。
该命令与在移动文件中看到的命令相同。
mv source_directory target_directory
在上面的示例中,如果target_directory存在,则整个source_directory将被移至target_directory内部。
这意味着source_directory将成为target_directory的子目录。
5.如何重命名目录
重命名目录与移动目录相同。
唯一的区别是目标目录必须不存在。
否则,整个目录将其中移动,就像在上一个目录中看到的那样。
mv source_directory path_to_non_existing_directory
6.移动时如何处理覆盖文件
如果要移动文件,并且已经有一个同名文件,则现有文件的内容将立即被覆盖。
这并非在所有情况下都是理想的。
我们有一些选择来处理覆盖方案。
为防止覆盖现有文件,可以使用-n选项。
这样,mv不会覆盖现有文件。
mv -n source_file target_directory
但是也许我们想覆盖一些文件。
我们可以使用交互式选项-i,它将询问我们是否要覆盖现有文件。
mv -i source_file target_directory mv: overwrite 'target_directory/source_file'?
我们可以输入y覆盖现有文件,或者输入n而不覆盖现有文件。
还有一个用于进行自动备份的选项。
如果在mv命令中使用-b选项,它将覆盖现有文件,但是在此之前,它将创建覆盖文件的备份。
mv -b file.txt target_dir/file.txt ls target_dir file.txt file.txt~
默认情况下,文件的备份以~结尾。
我们可以使用-S选项并指定后缀来更改它:
mv -S .back -b file.txt target_dir/file.txt ls target_dir file.txt file.txt.back
处理覆盖时,也可以使用更新选项-u。
如果使用-u选项,则仅当源文件比现有文件新或者目标目录中不存在源文件时,才将源文件移动到新位置。
总结一下:
- -i:覆盖之前确认
- -n:不覆盖
- -b:用备份覆盖
- -u:如果目标文件旧或者不存在,则覆盖
7.如何强制移动文件
如果目标文件受写保护,则系统会要求我们先进行确认,然后再覆盖目标文件。
mv file1.txt target mv: replace 'target/file1.txt', overriding mode 0444 (r--r--r--)? y
为避免出现此提示并立即覆盖文件,可以使用强制选项-f。
mv -f file1.txt target