在 Linux 中,咱們對文件進行重命名通常都會使用到 mv
命令,這在對單個文件重命名時很是方便。可是,若咱們想要對一組文件進行重命名,mv
就有些乏力了。不過不要緊,今天咱們來介紹一個好用的能夠實現批量重命名的命令—— rename
命令。正則表達式
下面咱們來詳細介紹 rename
命令的用法。this
與 mv
命令不一樣,rename
命令不是簡單地指定新舊文件名就行的。相反,它使用與 Perl
相似的正則表達式。咱們先來看下例子。code
$ rename 's/old/new/' this.old $ ls this* this.new
其中,s
的做用是指定咱們使用第二個字符串替換第一個字符串
,從而將 this.old
改成 this.new
。blog
有人可能會問了,上面的例子咱們用 mv this.old this.new
這條命令不是更方便嗎?沒錯,可是這樣一條命令一次只能重命名一個文件,而咱們今天要作的是一次性重命名一組文件。教程
要怎麼處理呢?很簡單,來看下面的例子:開發
$ ls *.old report.old schedule.old stats.old this.old $ rename 's/old/new/' *.old $ ls *.new report.new schedule.new stats.old this.new
由以上結果可見,經過這個簡單的一條命令的操做,咱們能夠將當前目錄下全部 .old
結尾的文件重命名爲 .new
結尾的文件,簡單高效!字符串
若是你認爲那是 rename
命令的所有那就是圖樣圖森破了。rename
命令並不侷限於更改文件擴展名,也能夠更改文件名中的任意字符串。好比,咱們若是想要將名爲 report.*
的文件更改成 review.*
,則可使用如下命令:it
$ rename 's/report/review/' *
注意,正則表達式中提供的規則能夠更改文件名的任意部分,不管是文件名仍是擴展名。入門
$ rename 's/123/124/' * $ ls *124* status.124 report124.txt
若是你想交互性地使用 rename
進行重命名,以方便查看都作了哪些更改,從而避免錯誤修改,可使用 -v
選項。pdf
$ rename -v 's/123/124/' * status.123 renamed as status.124 report123.txt renamed as report124.txt
-v
選項是要改一條文本時,給你預覽一下,改一下條時,再給你預覽一下,而這樣效率比較低。若是我想要總體性地預覽,當確認沒有問題時一次性所有修改,怎麼操做呢?
咱們可使用 -n
或 --nono
選項讓 rename
命令實現上面的需求。
$ rename -n 's/old/save/' * rename(logger.man-old, logger.man-save) rename(lyrics.txt-old, lyrics.txt-save) rename(olderfile-, saveerfile-) rename(oldfile, savefile) rename(review.old, review.save) rename(schedule.old, schedule.save) rename(stats.old, stats.save) rename(this.old, this.save)
若是對上面的這些更改以爲沒問題,那麼能夠去掉 -n
選項來正式修改文件名。
注意,rename
正則表達式中的 .
不是通常的英文句號,而是指匹配任意字符的通配符,咱們能夠參考下面的命令來理解。
$ rename -n 's/.old/.save/' * rename(logger.man-old, logger.man.save) rename(lyrics.txt-old, lyrics.txt.save) rename(review.old, review.save) rename(schedule.old, schedule.save) rename(stats.old, stats.save) rename(this.old, this.save)
以上例子裏,不只 .old
被修改成 .save
,-old
一樣也被改成 .save
。
若是你想讓 .
就是表示一個句號,須要加一個 \
轉義符號,即便用 \.
表示英文句號 .
$ rename -n 's/\.old/\.save/' * rename(review.old, review.save) rename(schedule.old, schedule.save) rename(stats.old, stats.save) rename(this.old, this.save)
若要將大寫字母都更改成小寫字母,咱們可使用如下命令。
$ rename -n 'y/A-Z/a-z/' W* rename(WARNING_SIGN.pdf, warning_sign.pdf) rename(Will_Gardner_buttons.pdf, will_gardner_buttons.pdf) rename(Wingding_Invites.pdf, wingding_invites.pdf) rename(WOW-buttons.pdf, wow-buttons.pdf)
其中,使用 -n
預覽將要進行的更改,y
表示更改大小寫。
在上面的示例中,咱們將全部以大寫字母 W
開頭的文件名所有改成小寫字母。
若是想要對單個文件進行重命名,可使用 mv
命令。而若是想對一組文件進行重命名,那麼使用 rename
命令更方便,注意,使用 rename
命令最好加上 -n
選項,先預覽將要進行的更改,確認無誤後再進行重命名,避免意外出現。 -----------------
我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注個人公衆號「良許Linux」,裏面分享了 Linux入門、基礎、進階 等系列教程,同時也有 Git、Vim、開源項目 等技術乾貨。公衆號後臺回覆「1024」獲取最新最全的技術資料,回覆「入羣」進入高手如雲技術交流羣。