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….)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwlMFRlW1YUbhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TN4UTOwkTMxIDOxcDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
我們想要排序成這樣
1.txt
2.txt
3.txt
...
10.txt
11.txt
100.txt
使用sort指令
ls | sort -k1.1n
其意思是按照第一個域的第一個索引到第一個域的最後一個索引的數值順序排序。之是以有域的概念是比如有下面這種情況排序(檔案内容排序),這個時候就有三個域了,詳細參考[3]
再比如有檔案
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