當前位置:
首頁 > 科技 > 三招快速搞定 Linux 文件批量重命名!

三招快速搞定 Linux 文件批量重命名!

作者 | 良許

責編 | 仲培藝

在我們的工作生活中,不管是程序員還是非程序員,都會遇到一個需求,那就是對一堆文件進行重命名。在 Windows 下有很多優秀的軟體可以幫助我們完成這個需求,而在 Linux 環境下,我們可以簡單敲一些代碼就可以完成這個需求。

本文將介紹三種最基本的文件重命名方法,因為比較基礎,所以老司機可以到此為止。

rename 命令

顧名思義,rename 命令就是用來進行重命名文件名的。rename 命令有非常強大的功能,我們可以用它來實現各種各樣複雜的文件名修改。但是,本文只介紹它最最基本的功能。其最基本的格式如下:

rename 源字元串 目標字元串 文件

其中,源字元串表示原文件名需要替換的字元串,可以是原文件名的全部或部分;目標字元串就是想要替換成的字元串;文件就是需要更改文件名的文件列表,可以是一個或多個。

現假如目錄下有一堆atb_mod_01.cpp、atb_mod_02.cpp、atb_mod_03.cpp、atb_mod_04.cpp等形式的文件,我們的需求是將文件名中的mod改成adb,那麼完成這個需求的命令如下:

[alvin@VM_0_16_centos exp3]$ ls

atb_mod_01.cpp atb_mod_02.cpp atb_mod_03.cpp atb_mod_04.cpp

[alvin@VM_0_16_centos exp3]$ rename mod adb *

[alvin@VM_0_16_centos exp3]$ ls

atb_adb_01.cpp atb_adb_02.cpp atb_adb_03.cpp atb_adb_04.cpp

mv 命令配合 for 循環方式

假如我們現在有一堆.txt文件,我們想將它們的後綴改成.cpp。先來看完整的代碼:

#!/bin/bash

for name in `ls *.txt`

do

mv $name $.cpp

done

我們都知道,在 Linux 里重命名是用 mv 命令,那批量重命名自然會想到用循環語句嵌套 mv 命令。

在這裡,我們用 `ls *.txt` 將當前目錄下所有的 txt 文件全部列出來,然後逐個放在 name 變數里去循環操作。

在循環體里,我們使用 mv 命令進行重命名。這裡我們使用$這種字元串處理方式,表示從name尾部開始刪除與.txt匹配的最小部分,並返回剩餘部分。之後,再加上.cpp後綴。通過這種操作,我們就可以將文件名後綴從.txt改為.cpp。最後我們用 mv 命令將這個文件名真正改過來。

sed 命令配合 for 循環方式

假如我們現在有一堆文件,文件名格式是test01.txt、test02.txt、test03.txt、test04.txt也就是前半部分是英文,後半部分是數字。我們現在想將文件名改成test-01.txt這種形式。這次,我們用 sed 命令來完成這個需求。

我們還是先來看看完整的代碼:

#!/bin/bash

for file in `ls *.txt`

do

newFile=`echo $file | sed "s/([a-z] )([0-9] )/1-2/"`

mv $file $newFile

done

前面一樣用 `ls *.txt` 來獲取所有的.txt文件。之後再用 echo 命令將其順次輸出,作為 sed 命令的輸入。

接下來,到達關鍵部分了。乍一看 sed 的命令可能有點可怕,但老司機早已習以為常了。反引號里的內容其實是這樣的基本結構:

s/ 原字元串 /替代的字元串 /

這裡我們用到了分組匹配,也就是用括弧按照一定的正則表達式將原字元串進行分組,後面再用1,2,3……來引用前面的分組,從而在替代的字元串里拼湊成相應的格式。

前文已講述,原文件名是由前部分英文及後部分數字所構成的,英文可以用[a-z] 表示,數字可以用[0-9] 表示。注意不要忘記加號,表示前面字元的若干重複。然後,我們用 1、2 分別引用前面的對應部分,再用橫杆連起來,於是就成了這樣::

s/([a-z] )([0-9] )/1-2/

因為在不同的 Shell 里,括弧及加號可能會有不同的含義,所以前面要再加一個轉義符,於是就成了前面所見到的樣子。

再之後,同樣使用 mv 命令完成重命名動作。

聲明:本文為作者投稿,版權歸其個人所有。

熱 文推 薦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

谷歌微軟 IBM 激戰雲端,亞馬遜地位恐將不保?
坐地起價?三星首款摺疊屏手機 1.3 萬起!

TAG:CSDN |