首頁  >  文章  >  系統教程  >  看了這篇文章!我才知道 Linux mv 指令的真正使用方法

看了這篇文章!我才知道 Linux mv 指令的真正使用方法

WBOY
WBOY轉載
2024-02-12 12:09:141070瀏覽

眾所周知,在 Linux 系統中,一切皆是文件!

看了这篇文章!我才知道 Linux mv 命令的真正使用方法

所以,對於檔案的操作與管理在 Linux 系統中顯得尤其重要,今天,就要跟大家介紹一個檔案管理指令 mv 。

本文主要講解 mv 指令的具體用法與實際中應該注意的點,讓我們一起透過理論 實例 的形式,一起來研究和學習 mv 指令。

mv 簡介

#mv 指令是 move 的縮寫, 也是 Linux 系統下常用的指令之一,mv 指令常常用來移動、重新命名檔案或目錄。或將檔案從一個目錄移到另一個目錄中,如果將一個檔案移到一個已經存在的目標檔案中,這時目標檔案的內容會被此檔案內容覆蓋。

如果來源為文件,而目標為目錄,mv 將進行文件的位置移動。如果來源為目錄,則目標只能是目錄(不能為檔案),mv 將進行目錄的重指令名。

mv 指令移動檔案時,在目標不同的情況下,會有下面 4 種不同的結果

  • 如果目標是指定的某一個特定路徑,則來源檔案會被移到此目錄下,且檔案名稱不變。
  • 如果目標不是目錄,則來源文件名稱(只能有一個)會變為此目標文件名,如果存在同名文件,則會覆蓋己存在的同名文件。
  • 如果原始檔案和目標檔案在同一個目錄下,mv 的作用就是修改檔案名稱。
  • 當目標是目錄時,來源檔案或目錄可以是多個,這時所有的來源檔案都會被移至目標目錄下。並且所有的文件都將保留先前的文件名。

語法格式

#
mv [选项] 源文件或目录 目标文件或目录
mv [options] source destination

選項說明

-b   #当目标文件存在时,覆盖之前创建一个备份
-f   #如果移动的文件或目录与目标重复,则直接覆盖(无需确认)
-i   #交互式操作,覆盖前会提示用户进行确认操作,用户通过输入Y/N来确认是否覆盖
-u   #若目标文件已存在,且与需移动的文件同名,只有在源文件比目标文件较新时,才会更新目标文件
-t   #指定mv的目标目录,此选项使用于移动多个文件到一个目录的情况,目标文件在前,源文件在后。
-S:#为备份文件指定(自定义的)后缀
-n  #不覆盖任何现有文件
-T  #将目标当作普通文件,而不是目录
-v  #详细输出命令的执行过程信息

應用範例

#重新命名檔案(目錄)

指令格式:mv 原始檔 目標檔 或 mv 來源目錄 目標目錄

#注意:我們在使用這個命令時必須保證來源檔案(目錄)和目標檔案(目錄)在同一個目錄下,並且目標檔案(目錄)不存在,否則使用這條指令的效果就由重命名變成檔案(目錄)的移動了。

首先,我們建立測試所需的檔案與目錄

[root@CentOS7-1 mv]# ll
total 0
[root@CentOS7-1 mv]# touch mvfiles
[root@CentOS7-1 mv]# mkdir mvdir
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan  8 09:03 mvdir
-rw-r--r-- 1 root root 0 Jan  8 09:02 mvfiles

進行重新命名操作

[root@CentOS7-1 mv]# mv mvfiles mvfilessssss
[root@CentOS7-1 mv]# mv mvdir mvdirectory
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan  8 09:03 mvdirectory
-rw-r--r-- 1 root root 0 Jan  8 09:02 mvfilessssss

如果需要指令執行的過程,可以加上參數-v

#
[root@CentOS7-1 mv]# mv -v mvfilessssss mvfiles
‘mvfilessssss’ -> ‘mvfiles’
[root@CentOS7-1 mv]# mv -v mvdirectory mvdir
‘mvdirectory’ -> ‘mvdir’
看了这篇文章!我才知道 Linux mv 命令的真正使用方法
同時移動單一或多個檔案(目錄)

#指令格式:mv 原始檔(目錄)1 原始檔(目錄)2 目標目錄 或 mv *檔案(目錄) 目標目錄

同時移動多個檔案(目錄)有兩種方法:

  • 第一种命令格式可以把多个文件(目录)同时移动到目标目录下,文件(目录)之间以空格分隔
  • 第二种命令格式采用通配符将具有类似文件名或类型等的文件(目录)同时移动到目标目录下

注意:目标目录下如果存在相同的文件名或目录名,容易误操作将同名文件或目录覆盖。

创建测试用的文件和目录

[root@CentOS7-1 mv]# touch 1.txt 2.txt 3.txt
[root@CentOS7-1 mv]# mkdir 1 2 3 
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan  8 09:20 1
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
drwxr-xr-x 2 root root 6 Jan  8 09:20 2
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
drwxr-xr-x 2 root root 6 Jan  8 09:20 3
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

移动文件

[root@CentOS7-1 mv]# mv -v 1.txt 2.txt 3.txt /root/mv1/
‘1.txt’ -> ‘/root/mv1/1.txt’
‘2.txt’ -> ‘/root/mv1/2.txt’
‘3.txt’ -> ‘/root/mv1/3.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt
看了这篇文章!我才知道 Linux mv 命令的真正使用方法

目录的移动其实也是一样操作,也非常的简单。如果目标位置有同名文件,我们不希望它被覆盖,可以加上 -n 选项

[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan  8 09:20 1
drwxr-xr-x 2 root root 6 Jan  8 09:20 2
drwxr-xr-x 2 root root 6 Jan  8 09:20 3
-rw-r--r-- 1 root root 0 Jan  8 09:24 test.txt
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan  8 09:25 test.txt
[root@CentOS7-1 mv]# mv -nv test.txt /root/mv1/
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan  8 09:25 test.txt
看了这篇文章!我才知道 Linux mv 命令的真正使用方法
交互式覆盖文件

这个操作只需要添加一个参数(-i)即可

[root@CentOS7-1 mv]# mv test.txt -v -i /root/mv1/
mv: overwrite ‘/root/mv1/test.txt’? y
‘test.txt’ -> ‘/root/mv1/test.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan  8 09:24 test.txt
看了这篇文章!我才知道 Linux mv 命令的真正使用方法
仅当源文件(目录)较新时才覆盖
看了这篇文章!我才知道 Linux mv 命令的真正使用方法

从上图中可以看出,mv 目录下的 test.txt 文件较新,如果我们执行反向操作,并且带上-u参数,来测试旧文件是否会覆盖掉新文件:

[root@CentOS7-1 mv]# mv -v -u /root/mv1/test.txt ./
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan  8 09:20 1
drwxr-xr-x 2 root root 6 Jan  8 09:20 2
drwxr-xr-x 2 root root 6 Jan  8 09:20 3
-rw-r--r-- 1 root root 0 Jan  8 09:36 test.txt

结果表明并没有覆盖掉新文件,接下来,我们测试仅当源文件(目录)较新时才覆盖这个功能。

[root@CentOS7-1 mv]# mv -v -u ./test.txt /root/mv1/
mv: overwrite ‘/root/mv1/test.txt’? y
‘./test.txt’ -> ‘/root/mv1/test.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan  8 09:36 test.txt
看了这篇文章!我才知道 Linux mv 命令的真正使用方法

从上图结果中可以看出覆盖成功,这种操作可以用在大量文件移动时,也可以用在更新文件或目录时。

覆盖文件前创建备份
[root@CentOS7-1 mv]# cat test1.txt 
1
[root@CentOS7-1 mv]# cat test2.txt 
2

如果test2.txt存在,原来的文件会被备份

[root@CentOS7-1 mv]# mv -v -b test1.txt test2.txt
mv: overwrite ‘test2.txt’? y
‘test1.txt’ -> ‘test2.txt’ (backup: ‘test2.txt~’)
[root@CentOS7-1 mv]# ll
total 12
-rw-r--r-- 1 root root 2 Jan  8 09:49 test2.txt
-rw-r--r-- 1 root root 2 Jan  8 09:49 test2.txt~
-rw-r--r-- 1 root root 2 Jan  8 09:49 test3.txt
[root@CentOS7-1 mv]# cat test2.txt
1
[root@CentOS7-1 mv]# cat test2.txt~
2
看了这篇文章!我才知道 Linux mv 命令的真正使用方法

在备份的过程中,我们还可以通过参数--suffix=xxx来自定义文件的后缀名:

[root@CentOS7-1 mv]# cat test2.txt
1
[root@CentOS7-1 mv]# cat test3.txt 
3
[root@CentOS7-1 mv]# mv -v -b --suffix=.bak test2.txt test3.txt
mv: overwrite ‘test3.txt’? y
‘test2.txt’ -> ‘test3.txt’ (backup: ‘test3.txt.bak’)
[root@CentOS7-1 mv]# cat test3.txt
1
[root@CentOS7-1 mv]# cat test3.txt.bak 
3
看了这篇文章!我才知道 Linux mv 命令的真正使用方法

以上是看了這篇文章!我才知道 Linux mv 指令的真正使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lxlinux.net。如有侵權,請聯絡admin@php.cn刪除