0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用mv和rename命令重命名文件

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2023-01-17 17:43 ? 次閱讀

重命名文件和目錄是您經(jīng)常需要在Linux系統(tǒng)上執(zhí)行的最基本任務(wù)之一。 重命名單個(gè)文件很簡(jiǎn)單,但一次重命名多個(gè)文件可能是一個(gè)挑戰(zhàn)。

特別是對(duì)于剛接觸Linux的用戶而言。 您可以使用GUI文件管理器或命令行終端重命名文件。

mv命令重命名文件

mv命令用于將文件從一個(gè)位置重命名或移動(dòng)到另一個(gè)位置。 這是mv命令的基本語法mv [OPTIONS] source destination

source源可以是一個(gè)或多個(gè)文件或目錄,destination目標(biāo)可以是單個(gè)文件或目錄。

如果指定多個(gè)文件作為源source,則destination目標(biāo)必須是目錄。 在這種情況下,源文件將移動(dòng)到目標(biāo)目錄。

如果將單個(gè)文件指定為源source,并且目標(biāo)是目錄,則該文件將移動(dòng)到指定目錄。

要重命名文件,您需要將單個(gè)文件指定為源source,并將單個(gè)文件指定為目標(biāo)destination。 例如,以下mv命令將file1.txt重命名為file2.txt

mv file1.txt file2.txt

mv命令重命名多個(gè)文件

mv命令一次只能重命名一個(gè)文件,但它可以與其他命令一起使用,例如find命令在bash的for或while循環(huán)中重命名多個(gè)文件。

在以下示例中顯示如何使用Bash for循環(huán)將重命名當(dāng)前目錄中的所有.html文件。 并將.html擴(kuò)展名更改為.php。

for f in *.html; do 
    mv -- "$f" "${f%.html}.php"
done

讓我們解釋一下語句的含義,最容易理解當(dāng)然是最后的一行是shell/bash的關(guān)鍵詞done表示循環(huán)的結(jié)束。

第一行創(chuàng)建一個(gè)for循環(huán)并遍歷當(dāng)前目錄下以.html文件擴(kuò)展名的文件。 第二行將.html文件移動(dòng)并重命名文件。

并將文件的.html擴(kuò)展名替換為.php。 ${f%.html}使用的是shell參數(shù)擴(kuò)展,.html將會(huì)匹配文件名原來擴(kuò)展名,匹配的.html將會(huì)被刪除。

從示例中可以看出,使用mv命令重命名多個(gè)文件并不是一件容易的事,因?yàn)樗枰愫芎玫亓私釨ash腳本編程

mv命令除了可以和shell腳本的for循環(huán)整合之外。 我們還可以讓mv結(jié)合find命令來實(shí)現(xiàn)與上面相同的功能。

我們還可以使用find命令搜索/查找當(dāng)前目錄下以.html結(jié)尾的文件。 然后使用-exec對(duì)每個(gè)文件運(yùn)行指定命令。

-exec允許你指定要運(yùn)行的命令,find命令將搜索的每個(gè)結(jié)果一個(gè)接一個(gè)傳遞-exec要運(yùn)行的命令中。

你可在-exec運(yùn)行的命令使用字符串{}獲得正在處理的文件,如果你在使用find命令搜索文件使用絕對(duì)路徑,字符串{}將是一個(gè)文件的絕對(duì)路徑。

find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \\;

這里我們解釋一下上面的find和-exec,mv是怎么配合使用的。

find命令之后.表示當(dāng)前目錄,find的-depth選項(xiàng)表示遞歸當(dāng)前目錄下的所有目錄,-name選項(xiàng)表示要使用名稱進(jìn)行搜索。

"*.html"之所以加上雙引號(hào)是防止*號(hào)被shell解釋,*.html表示以.html作為擴(kuò)展名的文件。

-exec sh -c表示-exec要運(yùn)行命令是sh -c。 在類 Unix 操作系統(tǒng)上,sh是Bourne shell名名稱,是Unix和許多類Unix操作系統(tǒng)/Linux的標(biāo)準(zhǔn)命令語言解釋器。 -c是sh選項(xiàng)表示讀取命令字符串并運(yùn)行。

'f="{}"; mv -- "$f" "${f%.html}.php"'這是一個(gè)命令的字符串,我想你應(yīng)該知道大概含義,我們這里簡(jiǎn)單說一下。 f="{}"表示將{}賦值給變量f{} 是文件名。

最后'f="{}"; mv -- "$f" "${f%.html}.php"' 這個(gè)命令字符串將由sh來解釋并運(yùn)行。 分號(hào);結(jié)束exec執(zhí)行的命令。 它需要用\\進(jìn)行轉(zhuǎn)義,這樣你在里面運(yùn)行的shell 就不會(huì)把它當(dāng)作自己的特殊字符,而是將它傳遞給find。

rename命令重命名文件

rename用于重命名多個(gè)文件。 rename命令相比mv,你需要一些正則表達(dá)式的高級(jí)知識(shí)。

rename命令有兩個(gè)版本,語法不同。 在本教程中,我們將使用rename命令的perl版本。 如果您的系統(tǒng)上未安裝此版本,則可以使用發(fā)行版的軟件包管理器安裝該版本。

如果你的計(jì)算機(jī)運(yùn)行的是基于Debian的Linux發(fā)行版,例如Ubuntu,Linux mint。 可運(yùn)行命令sudo apt update && sudo apt install rename安裝rename。

對(duì)于基于Redhat的Linux發(fā)行版,例如CentOS,F(xiàn)edora。 可運(yùn)行命令sudo apt update && sudo apt install rename安裝rename。

Arch Linux用戶可運(yùn)行命令yay perl-rename或者yaourt -S perl-rename安裝rename。

sudo apt update && sudo apt install rename
sudo yum install prename
yay perl-rename ## or yaourt -S perl-rename

rename命令的語法是rename [OPTIONS] perlexpr files。 files表示多個(gè)文件,perlexpr是使用perl的正則表達(dá)式。

rename命令將多個(gè)文件根據(jù)指定的正則表達(dá)式重命名所有文件。 你可以在這里閱讀更多關(guān)于Perl的正則表達(dá)式的知識(shí)。

perl的正則表達(dá)式基本語法是action/SEARCHLIST/REPLACEMENTLIST/cdsr。 在重命名文件的perl正則表達(dá)式中常用的s///替換模式。

action 表示你要執(zhí)行操作,SEARCHLIST表示你要搜索的內(nèi)容,REPLACEMENTLIST表示你要REPLACEMENTLIST 替換SEARCHLIST。

在使用rename重命名文件時(shí),您還可以使用-n參數(shù)在不真實(shí)的運(yùn)行reanme命令嘗試打印要重命名的文件的名稱。 這將不會(huì)不重命名你的文件,可以用來做簡(jiǎn)單的測(cè)試。

默認(rèn)情況下,rename命令不會(huì)覆蓋現(xiàn)有文件。 傳遞-f參數(shù)以允許覆蓋現(xiàn)有文件。

例如,下面的rename命令將更改與擴(kuò)展名.html.php

rename 's/.html/.php/' *.html
rename -f 's/.html/.php/' *.html #覆蓋現(xiàn)有文件
rename -n 's/.html/.php/' *.html #嘗試運(yùn)行,用于測(cè)試

輸出看起來像這樣:

rename(file-90.html, file-90.php)
rename(file-91.html, file-91.php)
rename(file-92.html, file-92.php)
rename(file-93.html, file-93.php)
rename(file-94.html, file-94.php)

以下是一些如何使用rename命令的常見示例。

用下劃線替換文件名中的空格

rename 'y/ /_/' *

將文件名轉(zhuǎn)換為小寫

rename 'y/A-Z/a-z/' *

將文件名轉(zhuǎn)換為大寫

rename 'y/a-z/A-Z/' *

結(jié)論

至此您應(yīng)該很好地理解如何使用mvrename命令重命名文件。 當(dāng)然,還有其他命令可以在Linux中重命名文件,例如mmv。 對(duì)于新Linux用戶可以使用GUI批量重命名工具,例如Métamorphose。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11213

    瀏覽量

    208736
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    561

    瀏覽量

    24675
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    678

    瀏覽量

    21966
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    php中rename()函數(shù)的妙用

    php中rename()函數(shù)的妙用 大家都知道,rename()函數(shù)可以對(duì)文件或目錄進(jìn)行重命名的操作。其實(shí)它還可以做很多事情。 熟悉unix的朋友應(yīng)該知道shell
    發(fā)表于 01-11 09:33

    新手求助,如何按規(guī)定對(duì)文件進(jìn)行重命名?

    比如,一個(gè)原始文件夾下有好幾個(gè)子文件夾,每個(gè)子文件夾下又有很多圖片,現(xiàn)在有一個(gè)EXCEL表格,每列代表一個(gè)子文件夾中圖片的新名字,要求按EXCEL表格的
    發(fā)表于 10-28 08:53

    保存“設(shè)置數(shù)據(jù)(.scp)”我無法重命名文件名。(MSOX-4034A)

    我想通過設(shè)置菜單將設(shè)置數(shù)據(jù)保存到示波器。但是,我無法從“setup_0”(默認(rèn)名稱)重命名文件名。如何使用給定的文件名將設(shè)置數(shù)據(jù)保存到示波器中?謝謝, 以上來自于谷歌翻譯 以下為原文I want
    發(fā)表于 09-11 16:19

    重命名項(xiàng)目不在4.15上編譯

    項(xiàng)目文件夾”單選按鈕。4。當(dāng)只更改“項(xiàng)目名稱”時(shí),我可以編譯和運(yùn)行,但名稱本身在項(xiàng)目窗口中沒有改變,這不是我的目標(biāo)。5。因此,我標(biāo)記“重命名項(xiàng)目文件夾”單選按鈕,項(xiàng)目的名稱在項(xiàng)目窗口中確實(shí)發(fā)生了變化
    發(fā)表于 09-25 17:36

    CyWDR文件也需要重命名嗎?

    我想克隆一個(gè)項(xiàng)目,作為一個(gè)非常類似的項(xiàng)目的開始(稍后為相同代碼的新版本)使用。是“將工作區(qū)/項(xiàng)目歸檔”到新文件夾并解壓縮它的推薦方法。然后打開被復(fù)制和右擊的項(xiàng)目并“重命名”主項(xiàng)目?關(guān)于“CyWDR
    發(fā)表于 08-15 14:02

    f_rename函數(shù)具體該怎么使用?

    哥最近在搞資源管理器的程序請(qǐng)教原子哥f_rename函數(shù)的用法根據(jù)說明此函數(shù)能重命名,移動(dòng)文件因此我編寫如下:f_rename("0:/test.txt","0
    發(fā)表于 08-25 21:22

    在庫(kù)中查看怎么刪除或重命名函數(shù)?

    >我之前沒有這樣做,也不能>在庫(kù)中查看如何刪除或重命名函數(shù)?打開庫(kù)(文件 - >打開)并編輯。它不是一個(gè)vxe,是嗎?-SHAWN- 以上來自于谷歌翻譯 以下為原文> I
    發(fā)表于 10-28 14:05

    求助,如何重命名(正確的方式)STM32 項(xiàng)目?

    如何重命名(正確的方式)STM32 項(xiàng)目?如果我按 F2 我可以重命名項(xiàng)目的名稱,但項(xiàng)目文件夾仍然具有相同的名稱。如果我更改文件夾的名稱,則會(huì)出現(xiàn)錯(cuò)誤。為什么?有
    發(fā)表于 01-30 06:28

    Pads文件轉(zhuǎn)換Allegro PCB后封裝如何按PAD大小規(guī)則的重命名

    Pads文件轉(zhuǎn)換Allegro PCB后封裝如何按PAD大小規(guī)則的重命名,避免設(shè)計(jì)出錯(cuò)?! 》庋bPAD名字規(guī)則重命名  1、導(dǎo)出整板PCB封裝到一個(gè)新的lib文件路徑  2、任意打開一
    發(fā)表于 03-31 15:19

    LABVIEW中文件重命名的幾種方法——陳樹學(xué)《labview寶典》

    和REN是等同的,屬于內(nèi)部DOS命令。需要注意的是重命名后的文件名不能指定驅(qū)動(dòng)器和路徑,因?yàn)橹荒茉谠?b class='flag-5'>文件夾中重命名。四、利用API函數(shù)當(dāng)遇到
    發(fā)表于 01-03 16:35 ?4902次閱讀
    LABVIEW中<b class='flag-5'>文件</b><b class='flag-5'>重命名</b>的幾種方法——陳樹學(xué)《labview寶典》

    在Linux上使用簡(jiǎn)單的cp和mv命令來復(fù)制和重命名文件

    重命名它們,而不必為它們中的每一個(gè)使用 mv 命令。 /A-Z/a-z/ 告訴 rename 命令將范圍 A-Z 中的任何字母更改為 a-z
    的頭像 發(fā)表于 06-25 14:02 ?8369次閱讀

    如何使用python給所有文件重命名

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用python給所有文件重命名資料免費(fèi)下載。
    發(fā)表于 09-22 17:09 ?2次下載
    如何使用python給所有<b class='flag-5'>文件</b>夾<b class='flag-5'>重命名</b>

    快速實(shí)現(xiàn)SOLIDWORKS模型批量重命名

    我們?cè)谑褂肧OLIDWORKS設(shè)計(jì)產(chǎn)品時(shí),每次調(diào)用SOLIDWORKS Explorer重命名不能批量進(jìn)行,為了解決廣大工程師的困擾,今天我們來介紹一款可以批量重命名的軟件—SolidKits.BOMs。
    發(fā)表于 01-17 18:10 ?1406次閱讀
    快速實(shí)現(xiàn)SOLIDWORKS模型批量<b class='flag-5'>重命名</b>

    Linux rename命令重命名多個(gè)文件與目錄

    使用`mv`命令重命名多個(gè)文件和目錄可能是一個(gè)乏味的過程,因?yàn)樗婕笆褂霉艿?,循環(huán)等編寫復(fù)雜的命令
    的頭像 發(fā)表于 12-09 17:41 ?2959次閱讀

    討論Linux mv命令的一些實(shí)際示例

    mv 命令的最基本用途是重命名文件。那么讓我們看看如何重命名當(dāng)前目錄中的文件。
    的頭像 發(fā)表于 02-14 16:28 ?637次閱讀