2013-08-01 54 views
2

什麼命令,我可以用它來命名幾百個文件,當前命名如何按日期批量重命名文件?

file.2003-01-02.txt 
file.2003-01-04.txt 

...等等?我想他們被命名爲:

file_y2003m01d02.txt 
file_y2003m01d04.txt 

...等

換句話說,file.2007-12-09.txt將成爲file_y2007m12d09。是否有一組簡單的命令來做到這一點?

同樣我有另一個問題,其中文件名爲file_y2003m02d01_grid.txt。我想知道如何從每個文件名中刪除_grid,以便它符合我上面提出的格式。

回答

3

可以使用rename命令:

rename 's/^file\.([0-9]{4})-([0-9]{2})-([0-9]{2})\.txt$/file_y$1m$2d$3.txt/' * 

這使用Perl regular expression substitution轉換的文件名。上述命令的意思是:

  1. 查找文件開始^file.(該.已被轉義,否則任何字符相匹配),隨後捕獲的()[0-9]{4}(一個數位,4次),然後- ,然後另一個捕獲的數字組的兩次等,並且結束$.txt;

  2. 然後,這些文件重命名爲file_y隨後第一捕獲組$1,隨後m,其次是第二捕獲組$2,等,並與.txt結束。

你也應該能夠制定出如何使用相同的命令來解決你的第二個問題,有什麼你不知道如何rename作品。

0

您還可以使用SED:

例如:

ls | while read f; do echo "mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/')"; done 

這會告訴你,bash將運行命令。要實際執行此操作,請刪除回顯和引號:

ls | while read f; do mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/'); done