仕事がたまっているので、今日は小ネタです。
AndroidのスクリーンショットをPCに転送したい
サービスのチェックなどをしている時に、端末でパシャパシャとスクリーンショットを撮りまくることがあります。
このスクリーンショットの画像をPCに転送するのがちょっと面倒くさいです。
今までは、Dropboxとかで転送していたんですが、adbが使えることに気づきました。
adb pullはワイルドカードが使えない
つまり、端末内のファイルをadb pullで一気に引っ張るんですが、このコマンドは不幸にもワイルドカードが使えないようです。
$ adb pull /sdcard/Pictures/Screenshots/*
remote object '/sdcard/Pictures/Screenshots/*' does not exist
そこで、他に方法がないか調べました。
xargsで1つずつ引っ張る
調べたら同じ問題がStack Overflowにも投稿されていました。
android – adb pull multiple files – Stack Overflow
ここに書かれているのは、xargsを使う方法です。
adb shellでlsコマンドを実行し、スクリーンショットディレクトリ内のファイルの一覧を取得して、それに対してxargsコマンドを使って1つずつadb pullします。
やってみる
途中で、結果行以外を除去したり、trコマンドで整形もしてますが、だいたいこんな感じで全部取得できます。
$ adb shell ls /sdcard/Pictures/Screenshots/* | grep 'Screenshots' | tr '\r' ' ' | xargs -n1 adb pull
3859 KB/s (305901 bytes in 0.077s)
4050 KB/s (383307 bytes in 0.092s)
# ...(略)...
取得が終わったら、スクリーンショットを空にしてスッキリしておいても良いです。
adb shell rm /sdcard/Pictures/Screenshots/*
こちらはワイルドカードが使えます。
adbを使った方法なので、スクリーンショットに限らず、アクセス権がある範囲でどんなファイルでも使えます。