我没有从 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
脚本的新手,谁能帮我写这个脚本?
谢谢!
最佳答案
尝试用 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
(试运行模式开关)。
如果你运行下面的命令(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 的 rename
命令的路径。
如果你没有这个命令,搜索你的包管理器来安装它或者 do it manually
最后但同样重要的是,这个工具最初是由 Perl 之父 Larry Wall 编写的。
编辑
如前所述here ,如果你有以下错误:
Argument list too long
然后像这样使用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
,应该也可以)
关于linux - 如何重命名以 Unix 时间戳开头的多个文件 - imapsync 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468028/