我没有从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
脚本的新手,任何人都可以帮我这个脚本吗?
谢谢!
答案 0 :(得分: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
提示符的。这非常有用,您可以使用perl代码stat
代替warning http://pix.toile-libre.org/upload/original/1377510865.png修改器。{
当您的测试成为值时,您可以删除e
(干运行模式开关)。
do it manually 还有其他同名工具可能会或可能不会这样做,所以要小心。
如果您运行以下命令(-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
命令的路径。
如果您没有此命令,请搜索软件包管理器进行安装或here
最后但并非最不重要的是,这个工具最初是由Perl的父亲Larry Wall编写的。
如上所述{{3}},如果您遇到以下错误:
参数列表太长
然后像这样使用perl's rename
:
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'
试试,这也应该有用)