我没有接到剧本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
脚本,任何人都可以帮我这个剧本?
谢谢!
试着用这样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代码就像我在做一个替代stat
与e
修改。
您可以删除-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