重命名文件和目錄是您經常需要在Linux系統上執行的最基本任務之一。 重命名單個文件很簡單,但一次重命名多個文件可能是一個挑戰。
特別是對于剛接觸Linux的用戶而言。 您可以使用GUI文件管理器或命令行終端重命名文件。
mv命令重命名文件
mv
命令用于將文件從一個位置重命名或移動到另一個位置。 這是mv
命令的基本語法mv [OPTIONS] source destination
。
source
源可以是一個或多個文件或目錄,destination
目標可以是單個文件或目錄。
如果指定多個文件作為源source
,則destination
目標必須是目錄。 在這種情況下,源文件將移動到目標目錄。
如果將單個文件指定為源source
,并且目標是目錄,則該文件將移動到指定目錄。
要重命名文件,您需要將單個文件指定為源source
,并將單個文件指定為目標destination
。 例如,以下mv
命令將file1.txt
重命名為file2.txt
:
mv file1.txt file2.txt
mv命令重命名多個文件
mv
命令一次只能重命名一個文件,但它可以與其他命令一起使用,例如find
命令在bash的for或while循環中重命名多個文件。
在以下示例中顯示如何使用Bash for循環將重命名當前目錄中的所有.html
文件。 并將.html
擴展名更改為.php
。
for f in *.html; do
mv -- "$f" "${f%.html}.php"
done
讓我們解釋一下語句的含義,最容易理解當然是最后的一行是shell/bash的關鍵詞done
表示循環的結束。
第一行創建一個for循環并遍歷當前目錄下以.html
文件擴展名的文件。 第二行將.html
文件移動并重命名文件。
并將文件的.html
擴展名替換為.php
。 ${f%.html}
使用的是shell參數擴展,.html
將會匹配文件名原來擴展名,匹配的.html
將會被刪除。
從示例中可以看出,使用mv
命令重命名多個文件并不是一件容易的事,因為它需要你很好地了解Bash腳本編程。
mv
命令除了可以和shell腳本的for循環整合之外。 我們還可以讓mv
結合find
命令來實現與上面相同的功能。
我們還可以使用find
命令搜索/查找當前目錄下以.html
結尾的文件。 然后使用-exec
對每個文件運行指定命令。
-exec
允許你指定要運行的命令,find
命令將搜索的每個結果一個接一個傳遞-exec
要運行的命令中。
你可在-exec
運行的命令使用字符串{}
獲得正在處理的文件,如果你在使用find命令搜索文件使用絕對路徑,字符串{}
將是一個文件的絕對路徑。
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \\;
這里我們解釋一下上面的find和-exec,mv是怎么配合使用的。
find命令之后.
表示當前目錄,find的-depth
選項表示遞歸當前目錄下的所有目錄,-name
選項表示要使用名稱進行搜索。
"*.html"
之所以加上雙引號是防止*
號被shell解釋,*.html
表示以.html作為擴展名的文件。
-exec sh -c
表示-exec
要運行命令是sh -c
。 在類 Unix 操作系統上,sh是Bourne shell名名稱,是Unix和許多類Unix操作系統/Linux的標準命令語言解釋器。 -c
是sh選項表示讀取命令字符串并運行。
'f="{}"; mv -- "$f" "${f%.html}.php"'
這是一個命令的字符串,我想你應該知道大概含義,我們這里簡單說一下。 f="{}"
表示將{}
賦值給變量f
,{}
是文件名。
最后'f="{}"; mv -- "$f" "${f%.html}.php"'
這個命令字符串將由sh
來解釋并運行。 分號;
結束exec執行的命令。 它需要用\\
進行轉義,這樣你在里面運行的shell 就不會把它當作自己的特殊字符,而是將它傳遞給find。
rename命令重命名文件
rename
用于重命名多個文件。 rename命令相比mv
,你需要一些正則表達式的高級知識。
rename
命令有兩個版本,語法不同。 在本教程中,我們將使用rename
命令的perl版本。 如果您的系統上未安裝此版本,則可以使用發行版的軟件包管理器安裝該版本。
如果你的計算機運行的是基于Debian的Linux發行版,例如Ubuntu,Linux mint。 可運行命令sudo apt update && sudo apt install rename
安裝rename。
對于基于Redhat的Linux發行版,例如CentOS,Fedora。 可運行命令sudo apt update && sudo apt install rename
安裝rename。
Arch Linux用戶可運行命令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表示多個文件,perlexpr
是使用perl的正則表達式。
rename
命令將多個文件根據指定的正則表達式重命名所有文件。 你可以在這里閱讀更多關于Perl的正則表達式的知識。
perl的正則表達式基本語法是action/SEARCHLIST/REPLACEMENTLIST/cdsr
。 在重命名文件的perl正則表達式中常用的s///替換模式。
action
表示你要執行操作,SEARCHLIST
表示你要搜索的內容,REPLACEMENTLIST
表示你要REPLACEMENTLIST
替換SEARCHLIST
。
在使用rename重命名文件時,您還可以使用-n
參數在不真實的運行reanme命令嘗試打印要重命名的文件的名稱。 這將不會不重命名你的文件,可以用來做簡單的測試。
默認情況下,rename
命令不會覆蓋現有文件。 傳遞-f
參數以允許覆蓋現有文件。
例如,下面的rename命令將更改與擴展名.html
到.php
。
rename 's/.html/.php/' *.html
rename -f 's/.html/.php/' *.html #覆蓋現有文件
rename -n 's/.html/.php/' *.html #嘗試運行,用于測試
輸出看起來像這樣:
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/ /_/' *
將文件名轉換為小寫
rename 'y/A-Z/a-z/' *
將文件名轉換為大寫
rename 'y/a-z/A-Z/' *
結論
至此您應該很好地理解如何使用mv
和rename
命令重命名文件。 當然,還有其他命令可以在Linux中重命名文件,例如mmv
。 對于新Linux用戶可以使用GUI批量重命名工具,例如Métamorphose。
-
Linux
+關注
關注
87文章
11469瀏覽量
212911 -
文件
+關注
關注
1文章
578瀏覽量
25234 -
命令
+關注
關注
5文章
730瀏覽量
22710
發布評論請先 登錄
php中rename()函數的妙用
新手求助,如何按規定對文件進行重命名?
保存“設置數據(.scp)”我無法重命名文件名。(MSOX-4034A)
重命名項目不在4.15上編譯
CyWDR文件也需要重命名嗎?
f_rename函數具體該怎么使用?
在庫中查看怎么刪除或重命名函數?
求助,如何重命名(正確的方式)STM32 項目?
Pads文件轉換Allegro PCB后封裝如何按PAD大小規則的重命名
LABVIEW中文件重命名的幾種方法——陳樹學《labview寶典》

在Linux上使用簡單的cp和mv命令來復制和重命名文件
快速實現SOLIDWORKS模型批量重命名

評論