rename 批量修改文件名


From:https://www.cnblogs.com/lly001/p/10221021.html

rename與mv的區別就是mv只能對單個文件重命名,而rename可以批量修改文件名

linux中的rename有兩種版本,一種是C語言版的,一種是Perl版的,如何區分系統里的rename是哪個版本的,可以通過一下方式:

輸入man rename 看到第一行中包含Linux Programmer’s Manual時,這就是C語言版本的,如果第一行中包含 Perl Programmers Reference Guide,則就是Perl版本的。

Perl語言版本的rename用法

perl版本的rename同sed中的語法類似,rename perl正則表達式 待處理的文件

替換 rename 's/.rtv.txt.kml/.kml/' *.kml 或者rename 's/foo0/foo/' foo0[2]* 將foo02開頭的文件名中的foo0替換為foo

刪除某些字符  rename 's/gps_//' *.kml或者rename 's/.bak$//' *.bak

其中,?可替代單個字符*可替代多個字符,三種通配符可以一起結合使用。

實例:

把所有文件名內含有大小字母的,修改為小寫字母:rename 'y/A-Z/a-z/' *.txt 

linux中允許文件名中包含空格,但文件名中有空格時,在命令行調用文件時要將文件名用雙引號引起來或者對空格進行轉義才能行,去除文件名中空格的實現命令有以下兩種方式:

    1. find . -type f -name "* *" -print |while read name; do mv "${name}" `echo "${name}"|sed "s/[ ]\+/_/g"`;done
    2. rename "s/[ ]+/_/g" *
    • 其中[ ]+表示空格出現一次或多次,空格可以用[:space:]代替,該命令可替換為[[:space:]]+
    • 在sed中需要將+轉義,但在rename中不能轉義,因為rename 采用的是標准perl正則語法
    • 從命令中能夠看到sed與rename的區別,rename處理的是*所能匹配到的該目錄下的所有文件,它將所有文件名作為處理的對象,而命令sed 處理邏輯 文件名時,sed 處理的是文件內容,所以只能通過echo "文件名"|sed "s/[ ]\+/_/g的方式才能處理文件名

  rename 's/^/hello/' * 統一在文件頭部添加上hello 

  rename 's/.html$/.htm/' * 統一把.html擴展名修改為.htm

  rename 's/$/.zip/' * 統一在尾部追加.zip后綴:

  rename 's/.zip$//' * 統一去掉.zip后綴

  規則化數字編號名,比如1.jpg, 2.jpg ..... 100.jpg , 現在要使文件名全部三位即1.jpg .... 001.jpg,運行兩次命令:

  1. rename 's/^/00/'  [0-9].jpg # 這一步把1.jpg ..... 9.jpg 變幻為001.jpg .... 009.jpg
  2. rename 's/^/0/' [0-9][0-9].jpg # 這一步把10.jpg ..... 99.jpg 變幻為010.jpg ..... 090.jpg

C語言版本rename的用法

     rename 原字符串 需改成的字符串 需要修改的文件

  rename 'test' 'tast' *.txt,將文件名中的test改為tast

  rename .jpeg.jpg *.jpeg  修改文件的擴展名

總的來說:rename C語言版本所能實現的功能:批量修改文件名,結果是每個文件會被相同的一個字符串替換掉!也就是說,無法實現諸如循環 然后按編號重命名等

應用實例:

1.批量修改文件前綴

場景:folder A中有a.rtv b.a.c.imu a.t.gps a.y.ew.imu等等,想要將這些文件的文件名統一為test,后綴保持不變

一般的思路:

遍歷folder,依次獲取文件 ---> 獲取文件后綴${pre}--->使用mv ${file}  test.${pre}

該方法中沒有文件都要獲取后綴再執行mv命令,灰常復雜

rename方法:rename 's/.*\./test./' *即可,其中.*\.中.*代表匹配多次單個字符,\.代表對點進行轉義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM