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

linux timestamp imap sync

1414 观看

1回复

335 作者的声誉

我没有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脚本中的新手,任何人都可以帮我这个脚本吗?

谢谢!

作者: kapale 的来源 发布者: 2013 年 3 月 18 日

回应 (1)


2

114177 作者的声誉

决定

尝试这样做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提示。这是非常有用的,你可以把一些代码,就像我做的替代state修改。当测试变为有效时,

您可以删除-n(干运行模式开关)。

警告 还有其他具有相同名称的工具可能会或可能不会这样做,所以要小心。

如果运行以下命令(linux

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

你有一个结果

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

并且不包含:

ELF

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

如果没有,为了使它成为默认(通常已经是这种情况)on Debian和衍生出来Ubuntu

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

(替换/path/to/renameperl'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,这也应该有效)

作者: Gilles Quenot 发布者: 18.03.2013 12:44
32x32