尝试使用 Gmail 的 POP 提取器导入 53,800 多个单独的文件(邮件)。
Gmail 可以理解地拒绝,并给出错误:“要下载的邮件太多。另一台服务器上的邮件太多。”
有问题的文件夹类似于:
/usr/home/customer/Maildir/cur/1203672790.V57I586f04M867101.mail.net:2,S
/usr/home/customer/Maildir/cur/1203676329.V57I586f22M520117.mail.net:2,S
/usr/home/customer/Maildir/cur/1203677194.V57I586f26M688004.mail.net:2,S
/usr/home/customer/Maildir/cur/1203679158.V57I586f2bM182864.mail.net:2,S
/usr/home/customer/Maildir/cur/1203680493.V57I586f33M740378.mail.net:2,S
/usr/home/customer/Maildir/cur/1203685837.V57I586f0bM835200.mail.net:2,S
/usr/home/customer/Maildir/cur/1203687920.V57I586f65M995884.mail.net:2,S
...
使用 shell(FreeBSD 上的 tcsh、sh 等),我可以键入什么单行命令来将这个充满文件的目录拆分到单独的文件夹中,这样 Gmail 一次只能看到 1000 条消息? 带有 find 或 ls 的东西 | xargs mv 也许。无论是最快的。
所需的输出目录现在看起来像:
/usr/home/customer/Maildir/cur/1203672790.V57I586f04M867101.mail.net:2,S
/usr/home/customer/Maildir/cur/1203676329.V57I586f22M520117.mail.net:2,S
...
/usr/home/customer/set1/ (contains messages 1-1000)
/usr/home/customer/set2/ (contains messages 1001-2000)
/usr/home/customer/set3/ (etc.)
它不是单行的,但您可以像这样复制块(在 csh 中):
我不能 100% 确定管道是否适用于您拥有的文件数量,但值得一试。此外,您可能可以使用此命令一次执行 500 次,只需将 1000 更改为 500 即可。
折叠成一行(并删除了“回声”保护措施):
这不是最快的,但很干净。此解决方案避免解析 'ls' http://mywiki.wooledge.org/ParsingLs的输出并引用对“$file”的引用,否则具有异常名称的文件(如 Maildir 文件通常是)会破坏代码。例如,如果任何文件有空格或分号,那么引用 $file 不带引号不会让你走得太远(大多数时候)
阅读有关引用的更多信息:http: //mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words