【问题标题】:How do I rename multiple files beginning with a Unix timestamp - imapsync issue如何重命名以 Unix 时间戳开头的多个文件 - imapsync 问题
【发布时间】:2013-03-18 00:29:58
【问题描述】:

我没有从 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 脚本的新手,谁能帮我处理这个脚本?

谢谢!

【问题讨论】:

    标签: linux timestamp imap sync


    【解决方案1】:

    尝试使用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
    

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

    如果不是,则将其设为 Debian 和派生类 Ubuntu 的默认值(通常已经如此):

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

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


    如果你没有这个命令,搜索你的包管理器安装它或do it manually


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


    编辑

    here所述,如果出现以下错误:

    参数列表太长

    然后像这样使用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试试,应该也可以)

    【讨论】:

    • 感谢这个很棒的答案!它适用于我有 500 个文件的测试目录。我只剩下一个问题,目录有 13 个 Mio。文件...看起来这太多了:-(有没有办法轻松解决这个问题?错误消息:-bash:/usr/bin/rename:参数列表太长
    • 我不知道你说的“太多了”是什么意思,你试过吗?你有什么错误吗?你的电脑发炎了吗?告诉我们。
    • 是的,我已经尝试过了,正如我在上一篇文章中所写的那样。来自我的 ubuntu 10.04 机器的错误消息是:“-bash: /usr/bin/rename: Argument list too long”,其工作目录中的文件较少。
    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 2018-05-31
    • 2018-02-28
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多