<dd id="yzu3f"><tr id="yzu3f"><kbd id="yzu3f"></kbd></tr></dd>

              安基網 首頁 系統 Linux 查看內容

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

              2019-2-26 15:23| 投稿: xiaotiger |來自: 互聯網


              免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

              摘要: 在我們的工作生活中,不管是程序員還是非程序員,都會遇到一個需求,那就是對一堆文件進行重命名。在 Windows 下有很多優秀的軟件可以幫助我們完成這個需求,而在 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,那么完成這個需求的命令如下:

              [[email protected]_0_16_centos exp3]$ ls
              atb_mod_01.cpp atb_mod_02.cpp atb_mod_03.cpp atb_mod_04.cpp
              [[email protected]_0_16_centos exp3]$ rename mod adb *
              [[email protected]_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 ${name%.txt}.cpp
              done
              

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

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

              在循環體里,我們使用 mv 命令進行重命名。這里我們使用 ${name%.txt} 這種字符串處理方式,表示從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 命令完成重命名動作。

              作者:良許,目前就職于一家世界500強外企,專注于Linux應用開發。本文首發于個人公眾號「良許Linux」主要分享Linux方面干貨,歡迎關注。

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



              小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

              本文出自:https://www.toutiao.com/a6662190584448418311/

              免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


              鮮花

              握手

              雷人

              路過

              雞蛋

              相關閱讀

              最新評論

               最新
              返回頂部
              十一选五奖金对照表