「adb pull」で新しいファイルのみをプルする方法は?(Android SDKユーティリティ)


12

「adb pull / sdcard /」というコマンドを使用すると、Androidフォンの内部メモリのすべてのコンテンツを現在のローカルディレクトリにコピーできます(「adb pull / mnt / extSdCard /」は、外部SDカードでも同じことができます)。しかし、このコマンドは常にローカルに保存したファイルも含めて、常にすべてをコピーします。

新しいファイルと変更されたファイルのみをコピーする方法はありますか?(新しい日付のファイル)

回答:


8

ss-3-1415926535897932384626433で説明されているように、フラグはありませんが、最初にファイルのリストを取得してから、ローカルファイルが一致するかどうかを確認する必要があります。私はそのための小さなスクリプトを書きました:

#!/bin/sh

rfolder=/sdcard/DCIM/Camera
lfolder=Camera

adb shell ls "$rfolder" > android.files

ls -1 "$lfolder" > local.files

rm -f update.files
touch update.files

while IFS=  read -r q; do
  # Remove non-printable characters (are not visible on console)
  l=$(echo ${q} | sed 's/[^[:print:]]//')
  # Populate files to update
  if ! grep -q "$l" local.files; then         
    echo "$l" >> update.files
  fi  
done < android.files

script_dir=$(pwd)
cd $lfolder

while IFS=  read -r q; do
  # Remove non-printable characters (are not visible on console)
  l=$(echo ${q} | sed 's/[^[:print:]]//')
  echo "Get file: $l"
  adb pull "$rfolder/$l"
done < "${script_dir}"/update.files

リモートフォルダーrfolderとローカルフォルダーlfolderを任意の場所に調整します。


これはかなりよさそうだ。それは再帰的に機能しますか、それとも単一のディレクトリでのみ機能し、サブディレクトリはありませんか?
OMA 2015

これは確かに非再帰的ですが、自由に改善してください。:-)
Anne van Rossum

また、ここでは日付をまだ比較していません。そのため、ファイルを変更した場合、更新されません。
アンヴァンロッサム2015

6

adb-sync-小さくてもパワフルなPythonスクリプトで、要求されたすべてのことを実行できます... https://github.com/google/adb-sync


リンクはおそらくこのユーザーの答えですが、それを機能させるために実行する方法とプロセスを完全に説明するのが最善です。android.stackexchange.com/help/how-to-answer
acejavelin 2017年

言及いただきありがとうございます。私のユースケースで機能するようにソースコードにいくつかの変更を加える必要がありました(Windowsの無効なパスが原因でクラッシュ、Pythonバージョンの不一致が明らかに発生しているなど-詳細については、コメントした問題を参照してください)。破損したデータパーティションからファイルを取得できた唯一の方法。(ディレクトリ全体のadbプルはさまざまなファイルでクラッシュし、手動で各ファイルを削除してから転送全体を再起動する必要はありませんでした-adb-syncを使用すると、その1つのファイルが失敗するだけですその後続行)
Venryx

4

adb pull 選択したファイルをプルするためのフラグを提供していないようです

回避策として、これを行うことができます。を使用adb shell [Unix shell command]して、選択したファイルを一時的な場所にコピーし、その場所からすべてのファイルをプルします。

更新: unixシェルコマンドを
使用cp -u [source] [destination]して、以降の実行時に変更されたファイルのみをコピーできます。-r必要に応じて、フラグを使用してサブディレクトリで再帰的に使用することもできます。


ご回答有難うございます。すべてのファイルを別の場所にコピーしてから、変更された1つのファイルのみを更新するのはかなり時間がかかります。adbが新しいファイルのみをコピーする方法を提供しないのは残念です。
OMA 2013

@OMAシェルを使用して新しいファイルのリストを取得し、adb pullそのリストで使用できます。
マシュー

@MatthewRead方法についてのヒントはありますか?ありがとう!
OMA 2013

@OMAこれであなたの問題を理解できません。両方のコマンドを1行で使用するか、エイリアスを作成します(操作後に一時的な場所を削除するコマンドも追加します)。そのためのadb pullのフラグがあった場合、それは同じように動作します。
Android Quesito 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.