如何使用“ adb pull”仅提取较新的文件?(Android SDK实用程序)


13

使用命令“ adb pull / sdcard /”,我可以将Android手机内部存储器的所有内容复制到当前本地目录中(“ adb pull / mnt / extSdCard /”与外部SD卡相同)。但是该命令将始终复制所有内容,即使我已经在本地存储的文件也是如此。

有什么办法只能复制新文件和修改过的文件?(具有较新日期的文件)

Answers:


9

如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

另请注意,我还没有在这里比较日期,因此,如果您更改了文件,它们将不会更新。
Anne van Rossum 2015年

7

adb-sync-小型但功能强大的python脚本,可以执行所有您要求的操作以及更多... https://github.com/google/adb-sync


尽管该链接可能是该用户的答案,但是最好充分说明使它起作用的方法和过程。android.stackexchange.com/help/how-to-answer
acejavelin

感谢您的提及。我必须对源代码进行几处更改,以使其适用于我的用例(Windows的无效路径导致崩溃,Python版本显然不匹配等,有关详细信息,请参阅我评论的问题),但是最终我能够从损坏的数据分区中检索文件的唯一方法。(整个目录的adb提取会在各种文件上崩溃,我不想手动删除每个文件,然后重新启动整个传输-使用adb-sync [+我的修改]只会使一个文件失败然后继续)
Venryx

4

adb pull 似乎没有提供拉选定文件的标志

解决方法是,您可以执行以下操作:adb shell [Unix shell command]用于将所选文件复制到一个临时位置,然后从该位置提取所有文件。

更新:
您可以使用cp -u [source] [destination]unix shell命令在以后的运行中仅复制修改后的文件。如果需要,还可以使用-rflag在子目录递归上使用它。


感谢您的回答。将所有文件复制到另一个位置然后仅更新一个更改的文件非常慢。太糟糕了,adb无法以复制新文件的方式提供建议。
OMA 2013年

@OMA您可以使用外壳程序获取新文件的列表,然后adb pull在该列表上使用。
Matthew阅读

@MatthewRead关于如何执行此操作的任何提示?谢谢!
OMA

@OMA我无法理解您对此的问题。在一行中同时使用两个命令或创建别名(还添加一个命令以在操作后清除临时位置)。如果为此有adb pull标志,则其工作方式相同。
Android Quesito
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.