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

时间:2013-03-18 00:29:59

标签: linux timestamp imap sync

我没有从imapsync获取脚本来重命名maildir文件名。 : - /

所以我需要的是:

我有一个包含数千封邮件的邮件文件夹。将这些电子邮件导入我的新服务器后,电子邮件的文件名将创建日期作为文件名中的Unix时间戳,但文件的创建日期标志是电子邮件中的正确接收日期。

对于一个文件,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)读取文件的创建日期/时间(我找到了命令

stat -c %y filename

这样做)

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

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

3)删除文件名的前10位(错误的时间戳),然后删除2)的时间戳

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

我是Linux脚本的新手,任何人都可以帮我这个脚本吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用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提示符的

。这非常有用,您可以使用代码stat代替warning http://pix.toile-libre.org/upload/original/1377510865.png修改器。{
当您的测试成为值时,您可以删除e(干运行模式开关)。

do it manually 还有其他同名工具可能会或可能不会这样做,所以要小心。

如果您运行以下命令(-n

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命令的路径。


如果您没有此命令,请搜索软件包管理器进行安装或here


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


修改

如上所述{{3}},如果您遇到以下错误:

  

参数列表太长

然后像这样使用perl's rename

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' 试试,这也应该有用)