如何重命名以Unix时间戳开头的多个文件 – imapsync问题

我没有从imapsync的脚本重命名maildir文件名工作。 : – /

所以我需要的是:

我有一个邮件文件夹与数以千计的邮件。 在将这些电子邮件导入到我的新服务器之后,电子邮件的文件名将创builddate的文件名称作为Unix时间戳,但是文件的创builddate标志是来自电子邮件的正确接收date。

一个文件的ls -l如下所示:

 -rw-r--r-- 1 popuser popuser 1350432 2013-03-16 07:22 1363563215.M562903P29332V0000000000000802I0000000000AEA46B_527.my-domain.org,S=1350432:2,S 

所以脚本要做的是:1)读取文件的创builddate/时间(我find了命令

 stat -c %y filename 

做这个)

2)将date/时间从1)转换为Unix时间戳

 date -d "2013-03-17 11:19:01.000000000 +0100" "+%s" 

3)删除文件名的前10个数字(错误的时间戳),而是从2)中删除时间戳

4)为特定目录中的所有文件执行此操作

我是Linux脚本中的newby,任何人都可以用这个脚本来帮助我吗?

谢谢!

Solutions Collecting From Web of "如何重命名以Unix时间戳开头的多个文件 – imapsync问题"

尝试rename

 $ rename -n 's/^\d+/(stat($_))[9]/e' [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]* 

shell提示符下。 这是非常有用的,你可以像我一样用一个perl代码来代替stat中的e修饰符。

当您的测试成为valids时,您可以移除-n (干运行模式开关)。

警告http://img.zgserver.com/linux/1377510865.png 还有其他的工具可能会也可能不会做到这一点,所以要小心。

如果你运行下面的命令( linux

 $ file $(readlink -f $(type -p rename)) 

你有一个像这样的结果

 .../rename: Perl script, ASCII text executable 

不包含:

 ELF 

那么这似乎是正确的工具=)

如果没有,在Debian和衍生工具(如Ubuntu )上将其设为默认(通常已经是这种情况):

 $ sudo update-alternatives --set rename /path/to/rename 

(替换/path/to/rename您的perl's rename命令的路径。


如果你没有这个命令,搜索你的软件包管理器来安装它或手动执行


最后但并非最不重要的是,这个工具最初是由Perl的爸爸Larry Wall编写的。


编辑

如此处所述,如果您有以下错误:

参数列表太长

然后用这个find

 find -type f -name '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' -print0| xargs -0 -n1 rename -n 's/^\d+/(stat($_))[9]/e' 

(尝试没有-n1 ,这也应该工作)