FC2ブログ


Androidー別デバイス間のタイムスタンプ保持ファイルコピーについての考察

ここでは、「Androidー別デバイス間のタイムスタンプ保持ファイルコピーについての考察」 に関する記事を紹介しています。

-->
疑問質問はTwitter(@hi_tec01)でも受け付けています https://twitter.com/hi_tec01
雑談等もしますし、どなたでもフォローしていただいて構いません。楽しく会話しましょう!
先月の閲覧TOP3は以下の記事となっております
1位:無料でステレオミキサーを入れよう!!(仮想ステレオミキサー)
2位:OBSでニコ生「高画質」「低負荷」放送する方法 Open Broadcaster Software
3位:OBSで高画質配信!生放送!導入と設定方法 Open Broadcaster Software

今回の目的は、Androidに使っているSDカードを新しいものにしたのでタイムスタンプを保持したままサルベージすること。
一番簡単な解決方法は、ダイソーでカードリーダライタを二つ買ってきてcpコマンドかscpコマンドでコピーすることなのだが、
あいにく持ち合わせが一つだけだったのでいろいろ考えた。

考察した工夫を列挙しておく。

■cp
Linuxコマンドなので、Windowsには使えない。
あと、マウントする必要がある。LinuxホストでAndroidのストレージをマウントするか、その逆か。

マウントするの面倒だが、サーバを立てるのはさらに面倒。
・FTP
・SSH(scpやsftpが使える)
  ・Windows10だとわりと容易に立てられる
  ・Androidにも建てられるが、SDカードの領域に入れなかったので注意。
  ・AndroidのコマンドラインからSSH叩くためにはroot化必要かも?Xperiaならsshやscpは最初からはいっている。
・WebDAV
・NFS
・SMB
  ・Androidで立てるとなるとかなり面倒。デフォルトの445が強制的に閉じられているから。
  挑戦する場合は下記に留意すること。
    ・解除にはrootが必要。
    ・Windowsのエクスプローラからは445にしかアクセスできない。

ちなみにAndroidでCLIベースの操作となると、少々めんどくさいが
・キーボードを接続する
・SSHサーバをAndroidで立ててリモート操作する
・adb shellで操作する
くらいだろうか。面倒だが、どれかはやらざるを得ない。


■scp
これは、SSHサーバとのファイル転送に用いるものコマンドだが、結構柔軟に扱える。
通常はローカルからリモートへの転送か、リモートからローカルへの転送として用いられる。
が、別にローカルからローカルでも使えるし、リモートかあdbらリモートへの転送でも問題ない。
どれも書き方は一緒で、
scp -p コピー元 コピー先
マウントする必要もないので楽ちんだが、前述したようにAndroid側にSSHサーバを立てる方法は面倒なので避けたい。
ただし、2019年からscpは推奨からはずされたため、デフォルト状態でscpが使えないかもしれません。
代わりに推奨されているのは、rxyncとsftpです。
sftpはタイムスタンプ保持のオプションがなく論外(WinSCPとかFileZIilaなら大丈夫かも)
rsyncにはタイムスタンプ保持のオプション -t がありますが、XperiaにもWindowsにもプリインストールされていないので使えません、汎用Linuxには入っているでしょうから、WSLの活躍の出番はここかもしれません。
この辺は追って調査したいと思います。

■SDカードリーダライタ
Android本体ではなく、SDカードでいいのであれば話は簡単だ。
ダイソーでSDカードリーダライタを買ってくればいい。
SDカード同士でもタイムスタンプ保持したままコピーできる。(もちろんリーダライタは二つに)
Windows10ならscpコマンドをつかえばいいし、Linuxならcpコマンドをつかえばよい。

■USB接続
メディアファイル転送用昨日を用いて、USB経由でファイルを転送できる。
ただ、これではWindowsのエクスプローラ上でしか操作できるなくなる。
タイムスタンプを保持させるのは難しいだろう。

■WinSCP
Windows用のファイル転送クライアント。FTP、SCP、SFTP、WebDAVに対応する。
SPC接続やSSH接続でローカル・リモート間のコピーであれば「たぶん」保持される「気がする」
AndroidにSSHサーバをたてて挑戦してみたいと思っているが、SDカードにアクセスできなかったので今回は断念。
AndroidにFTPを立てた場合は、リモートからローカルへはタイムスタンプが保持されたものの、
ローカルからリモートへは保持されなかったので注意してほしい。もしかしたらほかのプロトコルでもそうなのかも。
WinSCPでFTPを扱う場合、ファイル数が多すぎるとWinSCP側が全容を把握しきれず勝手にタイムアウトしてしまう(デフォルト15秒)
環境に合わせてにはなるが、長めに調整しておいたほうが良いと思う。私は100秒に設定した。

■adb pull/adb push
adbコマンドをつかったファイル転送方法。
どうやら、これらはタイムスタンプが保持される。
転送速度が若干遅い。
いつの間にか転送がとまっていることがあるので注意。
→これはWindows10のターミナル(PowerShellもコマンドプロンプトも)がアホなのが原因で、
 動作中に何かの拍子に誤ってターミナルをクリックをしてしまうと、
 次にEnterを押すまで動きが止まった状態となる。ナンデヤネン。
 であるからして、動かしたら即最小化しよう。
 設定変更で対応できるが、そうすると今度はマウスでなぞって選択する機能ごと無効にしてしまう。
 これはこれで不便なので避けたい。

大量に転送する場合は、誤操作しなくても止まるときがある。
自分の環境だと、15GBくらい転送したところで止まった。
単純にadbが死んでいるのだと思う。
100GBほど転送したかったので、この方法は断念した。

ディレクトリのコピーができないのも難点だが、一応回避策はある。
あらかじめ、コピー先に同名のディレクトリを作っておいて、コピー元側のパスにピリオドを付け加えるとよい。
例えばCCCというディレクトリをコピーしたい場合は、
adb shell mkdir /storage/XXX/CCC
adb push D:\AAA/BBB/CCC/. /storage/XXX/CCC/
とすれば、再帰的にコピーしてくれる。CCC配下にあるディレクトリも問題なくコピーされる。
ちなみに、何のファイルもない空のディレクトリはコピーされないが、使ってないから空なのだし大した問題ではないと思う。

■スマホにSDを二枚刺し
挑戦はしてないが、できると思う。
追加のスロットは、ダイソーでカードリーダライタとTypeAーTypeC変換コネクタを買ってくれば200円(税抜き)で作れる。
(ドライバの関係もあるので、どのリーダライタを買うかは下調べしたほうが良いと思うが)
これがクリアできればあとはcpコマンドでいけそう。

■結論
いろんな障害があるが、環境に合った組み合わせでがんばりましょう。
今回は、コピー元をAndroidスマホ刺してFTPサーバを立ち上げ、コピー先をPCのリーダライタに刺してWinSCPでコピーしました、
感想としては、リーダライタをもう一つ買ってさえいればこんなに苦労しなかったんだなというところでしょうか

最後に今回試したツール類を紹介しておきます。
Windows10 OpenSSHサーバ
Windwos10 OpenSSHクライアント
Android-Tools(adbを叩くためのもの)
WinSCP
Android用FTPサーバ:ファイルマネージャ (もともとファイルマネージャアプリですが、FTPサーバ機能も付いています。)
Android用SSHサーバ:U;timate Server Pro(Proとつくだけあって、ほとんどのサーバと機能がそろってますが、初心者には使いづらいと思います。使いこなせれば便利さは抜群)

スポンサードリンク
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://3pypromo.blog.fc2.com/tb.php/371-23299f54
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック