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"