android:用adb pushrecursion复制
我认为adb的推送是基于文件的。 我想能够推动整个文件夹。 有没有脚本的简单方法?
谢谢!
编辑:我需要使用子文件夹。
编辑:似乎adb拉是recursion的,但推不是。 所以我相应地改了标题和描述。
试试这个(使用子文件夹): adb push mySourceFolder/. myDestAndroidFolder
adb push mySourceFolder/. myDestAndroidFolder
UPD:空文件夹不会复制到Android设备。
adb拉,拉指定目录下的所有文件:
$ adb pull /mnt/sdcard/ pull: building file list... pull: /mnt/sdcard/t3.txt -> ./t3.txt pull: /mnt/sdcard/t2.txt -> ./t2.txt pull: /mnt/sdcard/t1.txt -> ./t1.txt 3 files pulled. 0 files skipped.
要么
$ adb push . /mnt/sdcard/ push: ./t2.txt -> /mnt/sdcard/t2.txt push: ./t3.txt -> /mnt/sdcard/t3.txt push: ./t1.txt -> /mnt/sdcard/t1.txt 3 files pushed. 0 files skipped.
我会更深入地挖掘这个完整的解决scheme(仅适用于Linux),因为谷歌redirect到这一点,我有这个完全相同的问题。
用一个简单的adb push,问题是所有的子目录在执行push之前必须存在,这可能是非常痛苦的。
请注意,一个简单的解决scheme是压缩文件夹,推拉链,然后在设备上解压缩。 但是假设您没有在设备上解压缩(实际上不太可能)。
你想在一个空的目录myDirectory中将一个带有很多子目录的完整树推送到你的设备中。 有两个步骤:
首先在源设备中创build所有子目录:
cd <folder-containing-myDirectory> find myDirectory/ -type d -exec adb shell mkdir <path-to-folder-containing-myDirectory-in-device>/{} \;
这个命令查找myDirectory的所有子目录(包括。,所以如果myDirectory已经存在,你将会有一个错误信息,你可以放心地忽略),并且为每个目录在设备上创build匹配的目录。
然后推动一切
adb push myDirectory/. <path-to-folder>/myDirectory
我意识到这个问题已经有点老了,我将在排除这个问题的时候提到脚本,但是我要回答这个问题。 主要是因为我希望我在这里find了这个答案,然后自己去解决。
如果所有子文件夹已经存在,adb push将recursion地工作。 他们可以是空的,似乎adb推不能做文件夹。 我发现这是一个有用的区别,因为可以运行一系列命令:
$ adb shell mkdir /folder $ adb shell mkdir /folder/sub1 $ adb shell mkdir /folder/sub2 $ adb push folder
所以,是的,你可以做一个小的包装脚本自动执行此操作。 不过,我认为更重要的一点是它只需要文件夹在那里。 这意味着,如果这是你要在同一个文件夹多次更新的东西。 例如,将图片添加到现有的子文件夹结构将使用单个adb push命令反复使用。
进入这个以及发现这篇文章有用,但可能已经find了一个更完整的解决scheme。 从包含要推送的文件/文件夹的文件夹运行以下命令:
adb push . /myDestinationFolder
密钥显然是目的地文件夹之前的前缀“/”。 这从我的Windows命令提示符工作,但是当我从git bash(在Windows上)运行它时,由于bash shell中的path中的“/”的含义,我得到一些错误。 所以这可能无法从Linux / bash工作,但它绝对复制所有子文件夹为我。
为了扩大autra
的天才答案,我做了一个快速的脚本来自动化这个(仅适用于Linux / Mac)。
我在我的主目录中创build了一个名为adb-push
的空文件。 然后我用文本编辑器(如gedit,nano,vim等)编辑文件,并将下列内容放入其中:
#!/bin/bash # Usage: # adb-push <directory-on-computer-to-send> <directory-on-device-to-receive-it> # Example: # adb-push ~/backups/DCIM /sdcard src="${1}"; trgt="$(basename ${1})"; dst="$(echo "${2}" | grep '/$')"; # If ${dst} ends with '/', remove the trailing '/'. if [ -n "${dst}" ]; then dst="${dst%/*}"; fi; # If ${src} is a directory, make directories on device before pushing them. if [ -d "${src}" ]; then cd "${src}"; cd ..; trgt="${trgt}/"; find "${trgt}" -type d -exec adb shell mkdir "${dst}/{}" \; fi; adb push "${src}" "${dst}/${trgt}";
然后,我使它可执行:
chmod +x ~/adb-push;
这是我如何运行它:
~/adb-push <directory-on-computer-to-send> <directory-on-device-to-receive-it>
例如,如果我想发送“ 〜/备份/ DCIM ”到我的设备的SD卡文件夹,我会这样做:
~/adb-push ~/backups/DCIM /sdcard
(但请记住,每个Android设备的SD卡的位置不是“ / sdcard ”,例如,可能是“ / mnt / sdcard ”)。
已经有几年了,问题可能会也可能不会改变,但它仍然是一个皮塔饼。 在linux上工作的是创build一个临时文件夹,创build一个符号链接到我想要复制的文件夹,然后我adb push。 它忽略主目录,但复制子目录。 目前,我不需要创build任何subdirs,他们创build和复制给我。 这可能是平台特定的,我不确定。 但是,我正在复制的主要目录,它复制的文件,而不是目录。 所以临时目录会被忽略,并且符号链接的文件夹会被复制。
例:
mkdir tmp cd tmp ln -s ../Foo . ln -s ../Bar . cd .. adb push tmp /sdcard/
它会将Foo/file1
推送到/sdcard/Foo/file1
。 只要adb push Foo/. /sdcard/
adb push Foo/. /sdcard/
然后我最终与/sdcard/file1
这并不让我高兴。
如何:存档 – >推 – >提取
export FOLDER="Books" TMPIFS="$IFS" IFS=$'\n' for i in `find "$FOLDER"/ -type d | sed 's,//\+,/,g'`; do adb shell mkdir -p /mnt/sdcard/"$i" done && \ adb push "$FOLDER"/ /mnt/sdcard/"$FOLDER" unset FOLDER IFS="$TMPIFS"
- Android Studio中的应用程序安装失败
- Android.mk,包含所有的cpp文件
- Android – 如何制作像facebook,spotify和Google +的幻灯片菜单
- 如何在Android Text View中显示双引号(“)符号
- 渲染问题在渲染过程中引发exception:com.android.ide.common.rendering.api.LayoutlibCallback
- 清单文件中的android:configChanges不允许使用错误stringtypes
- 如何在Mac中为facebook SDK生成Key Hash
- Android在Android Studio中使用新名称复制现有项目
- 如何在Android Studio中将库导出到Jar?