วันพฤหัสบดี, พฤษภาคม 14, 2558

Android TIPS: Using find command solving Titanium Backup backup problem.


TIPS: HOWTO find the zero-bytes filename under folderA then copy those files which have the same name from folderB to a new folder.

TL;DR

    เจอปัญหาเมื่อวานนี้ ผมอยากจะ flash rom ของ one plus one temasek's cm12.1 by katinatez
katinatez บอกว่าควรจะ clean flash เสมอ ซึ่งก็คือต้อง wipe factory reset+wipe dalvik cache
    ผมจึงทำการ backup apps ทั้งหมดด้วย Titanium Backup Pro ซึ่งใน post ที่แล้ว. หลังจาก clean flash เสร็จ หายนะก็มาเยือน พบว่า user apps หลายตัว (150 ตัว) ม้นกลายเป็น zero-bytes T_T อาการก็คือ กด restore แล้ว มันไม่มีวันทำเสร็จ

  ทางแก้เท่าที่นึกออกมีสองทาง คือ

1. ไล่ลงใหม่จาก Play Store  วิธีนี้เสียเวลามาก จึงนึกถึงวิธีต่อมา
2. หาทางเอา app backup กลับมา

   โชคดีที่มี backup ของ Titanium Backup ซึ่งสำรองออกมาไว้ใน hard disk เนื่องจากเพิ่ง convert partition เป็น F2FS ไป แต่ทีนี้จะทำอย่างไรละ ถึงจะ copy files ชื่อเดียวกันที่มี size 0 ใน backup  -ของ device จาก backup ที่อยู่ใน harddisk ออกมาได้ โดยไม่ต้องมานั่งไล่ทีละไฟล์

 ค้นไปมาได้คำสั่ง linux ใช้ find, xargs และ cp

Solution 
ขั้นตอน

1. Folder A (i.e.: titanium) มี backup folder ที่มีไฟล์ apk สมบูรณ์;

2. Folder B (i.e.: titanium2) backup folder ใน device ที่ apk เสียหาย

เอาออกมาจาก device ด้วยคำสั่ง
$ adb pull /sdcard/TitaniumBackup titanium2

3. ใช้คำสั่ง แบบนี้เพื่อหาไฟล์ที่มี size 0

$ find . -name '*apk.gz' -size 0
...
./at.mroland.android.apps.nfctaginfo-fbe0527a89f99a3d74bc385b51a294e2.apk.gz
./com.android.cellbroadcastreceiver-587c950124ea3e2d04bec29d1d1ca69d.apk.gz
./com.android.cellbroadcastreceiver-d7a84dcdb56f2c8ccc7468f53879e64d.apk.gz
./com.android.facelock-7b306c42af02a5de1d326f9ae42356a5.apk.gz
./com.android.facelock-a5d85c816569809e5c7ec5998ad79da4.apk.gz
./com.android.vending-cdc700d6cfb743abce9e22dd3fd16712.apk.gz
...

ไฟล์ backup ของ Titanium Backup จะมี extension เป็น apk.gz

4. เมื่อเจอแล้วว่าไฟล์ไหน size 0 บ้าง ทีนี้จะให้มันไป copy จาก folder ที่มี apk สมบูรณ์ไปพักไว้ที่ folder C ก่อนนำไปใช้

$ cd titanium2

$ mkdir recoverApp

$ find . -name '*apk.gz' -size 0 | xargs -I{} cp titanium/{} recoverApp/

เราจะได้ apps ที่สมบูรณ์มารออยู่ที่ recoverApp แล้ว


ไม่มีความคิดเห็น :