1

我没有得到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脚本新手,谁能帮我写这个脚本?

谢谢!

4

1 回答 1

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提示。它非常有用,您可以像我一样将一些代码替换为statwithe修饰符。

当您的测试有效时,您可以移除-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为您的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,应该也可以)

于 2013-03-18T00:44:30.960 回答