帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:重命名  FOLD  batch  for  form  Names  bat  日期  

问题:

我有大量的文件夹,命名为类似这样的日期:


10 Aug 2010 15 Sep 2010 20 Jun 2010 25 Jul 2010 6 Nov 2010


10 Sep 2010 16 Aug 2010 20 Mar 2010 26 Aug 2010 6 Oct 2010


11 Apr 2010 16 Jun 2010 21 Jun 2010 28 Aug 2010 7 Apr 2010


12 Aug 2010 16 Oct 2010 21 Mar 2010 28 Feb 2010 7 Aug 2010


13 May 2010 17 Apr 2010 22 Feb 2010 28 Jun 2010 7 Jun 2010


14 Aug 2010 17 Aug 2010 23 Jul 2010 28 Mar 2010 8 Apr 2010


14 Jun 2010 18 Aug 2010 24 Jul 2010 29 Mar 2010 8 Aug 2010


15 Aug 2010 19 Aug 2010 24 Nov 2010 30 Aug 2010 8 Jul 2010


15 Jul 2010 4 Apr 2010 25 Apr 2010 6 May 2010 8 Sep 2010



我要将日期格式改为:


2010-04-04 2010-05-03


2010-06-06 2010-07-02


2010-07-05 2010-09-01


2010-09-04 2010-09-05


2010-11-01



如何批量批量重命名 DD MMM YYYYYYYY-MM-DD的大量文件夹?


回答 1:

有点意外,看起来我们的老朋友 prename ( 某些系统上的a.k.a rename ) 可以做到这一点:


$ prename -vn -- '


 BEGIN{use Time::Piece};


 s/d+ w+ d+/Time::Piece->strptime($&,"%d %b %Y")->strftime("%Y-%m-%d")/e


' *


10 Aug 2010 renamed as 2010-08-10


8 Sep 2010 renamed as 2010-09-08



或者,使用 GNU date


dirs=(????????????????? ) # matches D MMM YYYY and DD MMM YYYY



for d in"${dirs[@]}"; do mv -v --"$d""$(date '+%Y-%m-%d' -d"$d")"; done



使用 echo ( 与prename标志的-n 等效) 进行测试:


$ for d in"${dirs[@]}"; do echo mv -v --"$d""$(date '+%Y-%m-%d' -d"$d")"; done


mv -v -- 8 Sep 2010 2010-09-08


mv -v -- 10 Aug 2010 2010-08-10



请注意,日期解析可以是语言环境。


回答 2:

GNU date 命令在不同日期格式之间很好地转换。 例如:


$ date -d '17 Aug 2010' +%F


2010-08-17



记住,如果目标目录中唯一的东西是要重命名的子目录,可以简单地做:


for d in *; do mv"$d""$(date -d"$d" +%F)"; done



如果要指定目录只,请使用:


for dir in */; do d=${dir%%/}; mv"$d""$(date -d"$d" +%F)"; done



对于 MATCH,仅对它的NAME 以数字开头的目录:


for dir in [0-9]*/; do d=${dir%%/}; mv"$d""$(date -d"$d" +%F)"; done




回答 3:

下面是一个可以使用 datetime 模块进行重命名的python 脚本:


#!/usr/bin/env python



from datetime import datetime


import os


import os.path


import sys



def main(target):


 dir_path = os.path.abspath(target)


 for i in os.listdir(target):


 old_name = os.path.join(dir_path, i)


 d = datetime.strptime(i, '%d %b %Y').strftime('%Y-%m-%d')


 new_name = os.path.join(dir_path, d)


 os.rename(old_name, new_name)



if __name__ == '__main__':


 main(sys.argv[1])



让我们把脚本叫做 rename.py。 要使用脚本,首先运行 chmod +x rename.py,然后运行 ./rename.py parent_dir,它的中 parent_dir 是包含你想要更改的所有目录的父目录。


回答 4:

下面是一个 ruby 脚本,它可以完成。 把这个放到目录所在的目录中。


#!/usr/bin/env ruby



require 'time'



Dir.glob('*').select do |f|


 if File.directory? f


 time = Time.parse(f.to_s)


 File.rename(f, time.strftime("%Y-%m-%d"))


 end


end



使用 chmod +x rename.rb./rename.rb 重命名目录




文章标签:for  form  格式  日期  FOLD  bat  Names  batch  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语