在我們的作業生活中,不管是程式員還是非程式員,我們都會遇到過一個需求,那就是對一堆的檔案進行重命名,在Windows下有很多優秀的軟體可以幫助我們完成這個需求,而在Linux環境下,我們可以簡單敲一些代碼就可以完成這個需求,
本文良許將介紹三種最基本的檔案重命名方法,因為比較基本,所以老司機可以到此為止,
1. rename命令
顧名思義,rename命令就是用來進行重命名檔案名的,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
2. mv命令配合for回圈方式
假如我們現在有一堆 .txt 檔案,我們想將它們的后綴改成 .cpp,先來看完整的代碼:
#!/bin/bash
for name in `ls *.txt`
do
mv $name ${name%.txt}.cpp
done
我們都知道,在Linux里重命名是用 mv 命令,那批量重命名自然會想到用回圈陳述句嵌套mv命令,
在這里,我們用 ls *.txt 將當前目錄下所有的txt檔案全部列出來,然后逐個放在name變數里去回圈操作,
在回圈體里,我們使用mv命令進行重命名,這里我們使用 ${name%.txt} 這種字串處理方式,表示從name尾部開始洗掉與 .txt 匹配的最小部分,并回傳剩余部分,之后,再加上 .cpp 后綴,通過這種操作,我們就可以將檔案名后綴從.txt改為.cpp,最后我們用mv命令將這個檔案名真正改過來,
3. 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命令完成重命名動作,
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/4485.html
標籤:Linux
上一篇:如何簡單的將手機投屏在windows上(可在電腦上直接操作手機)
下一篇:解決Windows10運行VMware Workstation出現與Device Guard不兼容導致無法創建與運行虛擬機問題
