释放让iBooks占用的冗余空间

用iPad的Safari从网上下载一个PDF文件,比如Programming Your Home.pdf,选择用iBooks打开,这本书就会出现在你的iBooks书架。但如果你用iFile进入/private/var/mobile/Media/Books/Purchases,你会发现多了个文件,3CF55ED902752B18DCF7FCAAFB343AD1.pdf,其大小和内容都跟Programming Your Home.pdf一式一样。进一步看/private/var/mobile/Media/Books/Purchases/Purchases.plist,你会发现其中有这么一段
<dict>
    <key>Genre</key>
    <string></string>
    <key>Inserted-By-iBooks</key>
    <true/>
    <key>Name</key>
    <string>Programming Your Home.pdf</string>
    <key>Path</key>
    <string>3CF55ED902752B18DCF7FCAAFB343AD1.pdf</string>
    <key>Persistent ID</key>
    <string>46F2BD6BBCDEDD4D</string>
    <key>iBooks-UniqueId</key>
    <string>3CF55ED902752B18DCF7FCAAFB343AD1</string>
</dict>

我试着把它改成
<dict>
    <key>Genre</key>
    <string></string>
    <key>Inserted-By-iBooks</key>
    <true/>
    <key>Name</key>
    <string>Programming Your Home.pdf</string>
    <key>Path</key>
    <string>Programming Your Home.pdf</string>
    <key>iBooks-UniqueId</key>
    <string>Programming Your Home.pdf</string>
</dict>
并删除3CF55ED902752B18DCF7FCAAFB343AD1.pdf,发现那本书还在iBooks书架里,还能正常打开。

iBooks把每一本书都存两份,实在太浪费空间了,我得向它要回一半的空间。

开始收回空间:
1. 用filezilla连上iPad,把它的/private/var/mobile/Media/Books/Purchases下的所有的PDF都下载到PC的一个临时目录,比如C:/tmp/books
2. 用putty连上iPad,把它的/private/var/mobile/Media/Books/Purchases下的所有的PDF都删除,Purchases.plist也删除。
3. 处理C:/tmp/books下的PDF文件,把形如3CF55ED902752B18DCF7FCAAFB343AD1.pdf的文件统统删除(如果文件太多,懒得手工一个一个去删,可以写个脚本)。再把PC上存在其他地方的一些自己喜欢看的PDF也拷贝到C:/tmp/books
4. 执行groovy脚本来生成一个Purchases.plist文件

def buf = ["""<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Books</key>
    <array>
"""]
new File('C:/tmp/books').eachFile{
    if(it.name.endsWith('.pdf'))
    buf << """<dict>
      <key>Genre</key>
            <string></string>
            <key>Inserted-By-iBooks</key>
            <true/>
            <key>Name</key>
            <string>${it.name}</string>
            <key>Path</key>
            <string>${it.name}</string>
            <key>iBooks-UniqueId</key>
            <string>${it.name}</string>
        </dict>"""
}
buf << """</array>
</dict>
</plist>"""
new File('c:/tmp/books/Purchases.plist') << buf.join()
 


5. 再用filezilla把PDFs和Purchases.plist传回/private/var/mobile/Media/Books/Purchases
6. 打开iBooks... 结果发现书架一片空白,那个loading图标一直显示,就是看不到书。
7. 怎么回事???把/private/var/mobile/Media/Books/iBooksData2.plist也给删除了,重启iPad再打开iBooks,还是没用。
8. 到底是怎么回事???没理由啊。最后逐行检查Purchases.plist,终于发现问题所在:原来有几本书的名字含有“&”,这个字符是不能直接出现在XML文件中的,得转义或者换成其他的字,果断把&换成and,然后再打开iBooks就看到了一堆书。。。 Cheers!

 

释放让iBooks占用的冗余空间_第1张图片

你可能感兴趣的:(OO)