如何重新命名一个Unix时间戳开始的多个文件 - imapsync问题(How do I rena

2019-07-21 20:29发布

我没有接到剧本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)从2删除该文件名的第一10位(错误时间戳)和我们的时间戳),而不是

4)这样做在特定目录中的所有文件

我在一个牛逼Linux脚本,任何人都可以帮我这个剧本?

谢谢!

Answer 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提示。 这是非常有用的,你可以把一些的Perl代码就像我在做一个替代state修改。

您可以删除-n (干式运行模式开关),当你的测试变得valids。

警告http://pix.toile-libre.org/upload/original/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命令。


如果你没有这个命令,请搜索您的软件包管理器进行安装或做手工


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


编辑

如前所述在这里 ,如果你有以下错误:

参数列表太长

然后使用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 ,这应该也工作)



文章来源: How do I rename multiple files beginning with a Unix timestamp - imapsync issue