重命名文件和目錄是您經(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)該很好地理解如何使用mv
和rename
命令重命名文件。 當(dāng)然,還有其他命令可以在Linux中重命名文件,例如mmv
。 對(duì)于新Linux用戶可以使用GUI批量重命名工具,例如Métamorphose。
-
Linux
+關(guān)注
關(guān)注
87文章
11213瀏覽量
208736 -
文件
+關(guān)注
關(guān)注
1文章
561瀏覽量
24675 -
命令
+關(guān)注
關(guān)注
5文章
678瀏覽量
21966
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論