天天看點

Linux檔案批量改名/排序總結(rename,sort等)

linux下檔案批量化改名時使用一些指令可以比較簡單快捷

1. 檔案名前補0

linux 下的rename指令可以使用正規表達式進行比對。舉例

for i in {1..100}; do touch ${i}.txt; done

在目前目錄下生成檔案

1.txt 2.txt 3.txt ... 10.txt 11.txt 100.txt

想要在前面都補上0,即變成

001.txt 002.txt ... 099.txt 100.txt

可以這樣[1]

i=1001; for f in *.txt; do mv "$f" ${i#1}.png; ((i++)); done

其中

i#1

是shell腳本中的字元串操作,即

${string#substring}

是從變量

$string

的開頭, 删除最長比對

$substring

的子串。[2]

2. 檔案名前去0

去掉上面檔案前面的0直接使用

rename

指令即可,即正規表達式(類似于vim中的正則比對),把前面的0換成空

rename "s/^0{1,2}//g" *

3. 檔案名排序

假設目前目錄下有檔案(僅說明情況,不在在意檔案名字尾不同的小細節orz….)

Linux檔案批量改名/排序總結(rename,sort等)

我們想要排序成這樣

1.txt 2.txt 3.txt ... 10.txt 11.txt 100.txt

使用sort指令

ls | sort -k1.1n

其意思是按照第一個域的第一個索引到第一個域的最後一個索引的數值順序排序。之是以有域的概念是比如有下面這種情況排序(檔案内容排序),這個時候就有三個域了,詳細參考[3]

Linux檔案批量改名/排序總結(rename,sort等)

再比如有檔案

ori_1.txt ori_2.txt ... ori_999.txt

則是

ls | sort -k1.5n

其實

n

的也是

sort

的一個參數,隻不過可以寫到參數

k

裡面,參考[4]中

Clinton Pierce

Dong Hoon

的回答

refer:

1. http://forum.ubuntu.org.cn/viewtopic.php?t=244095

2. http://blog.csdn.net/shamoqiuyin/article/details/51888390

3. 《sort指令的k選項大讨論》-linux指令五分鐘系列之二十七 http://roclinux.cn/?p=1472

4. https://stackoverflow.com/questions/357560/sorting-multiple-keys-with-unix-sort

5. http://bbs.chinaunix.net/thread-3755930-1-1.html

6. rename http://blog.sina.com.cn/s/blog_63fd1bdb01013lv6.html

繼續閱讀