安卓:递归复制与亚行推(android: Recursive copy with adb push)

2019-07-03 11:10发布

我认为,亚行推的是基于文件的。 我希望能够推动整个文件夹。 有没有脚本一种简单的方法?

谢谢!

编辑:我需要的子文件夹的工作。

编辑:看来,亚行拉是递归的,但推不。 所以我相应的修改标题和描述。

Answer 1:

试试这个(包含子文件夹的工作): adb push mySourceFolder/. myDestAndroidFolder adb push mySourceFolder/. myDestAndroidFolder

空文件夹不会复制到Android设备。



Answer 2:

亚行拉,拉在指定目录中的所有文件:

$ 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.


Answer 3:

我要挖这更是给一个完整的解决方案,这(仅适用于Linux)的,因为谷歌重定向到这一点,我有这个确切的同样的问题。

用一个简单的亚行推,问题是,所有的子目录必须存在,这样做的推动下,这是非常痛苦的实现。

需要注意的是一个简单的解决方案是将压缩的文件夹,推拉链然后解压缩该设备上。 但是,假设你没有在设备上解压缩(可能性很小,真的)。

你要推一个完整的树有很多子目录到您的设备在一个空目录mydirectory中。 有两个步骤:

首先创建所有子目录,在源设备:

cd <folder-containing-myDirectory>
find myDirectory/ -type d -exec adb shell mkdir <path-to-folder-containing-myDirectory-in-device>/{} \;

此命令找到mydirectory中的所有子目录(包括,所以如果mydirectory中已经存在,你将有一个错误消息,您可以放心地忽略),并为他们每个人,在设备上创建匹配的目录。

然后把一切

adb push myDirectory/. <path-to-folder>/myDirectory


Answer 4:

我意识到这个问题是有点老了,我要提的脚本时的问题排除在外,但我还是要去,以回答这个问题。 大多数情况下,因为我想我已经在这里找到这个答案,不得不解决它自己之前。

亚行推动将递归工作,如果所有子文件夹都存在了。 它们可以是空的,它只是似乎是亚行推不能使文件夹。 我发现这是一个有用的区别,因为人们可以运行一系列类似这样的命令:

$ adb shell mkdir /folder
$ adb shell mkdir /folder/sub1
$ adb shell mkdir /folder/sub2
$ adb push folder

所以,是的,我们可以做一个小包装脚本来自动执行此操作。 不过,我觉得更重要的一点是,它只是需要的文件夹在那里。 这意味着,如果这是什么,你会在同一文件夹更新多次。 例如,将图片添加到现有的子文件夹结构将与单ADB push命令工作带来极大的一遍又一遍。



Answer 5:

为了扩大autra的天才回答了一下,我做了一个快速脚本来自动执行此(仅适用于Linux的/苹果机)。

我在home目录下创建了一个空文件, adb-push 。 然后我编辑使用文本编辑器(如gedit中,纳米,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

(但是要记住的是,SD卡的位置不是“/ SD卡 ”为每一个Android设备。例如,它可能是“ 到/ mnt / SD卡 ”代替。)



Answer 6:

跑进这个问题,以及发现这篇文章有用,但可能已经找到了更完整的解决方案。 从文件夹中包含要推的文件/文件夹运行以下:

adb push . /myDestinationFolder

关键是显然的目标文件夹前的前缀“/”。 此工程从我的Windows命令提示符,但是当我从混帐庆典(在Windows上)运行它,我得到了一些错误,由于对“/”在Bash shell中的路径意义。 所以这可能不是从Linux / bash的工作,但是它肯定复制所有子文件夹给我。



Answer 7:

如何:档案 - >推 - >提取物



Answer 8:

这是一个几年,这些问题可能会或可能不会改变,但它仍然是一个PITA。 什么是为我工作在Linux上创建一个临时文件夹,创建符号链接到我要复制的文件夹(S),然后我亚行推动。 它忽略了主目录,但复制子目录。 目前,我不需要创建任何子目录,他们得到建立和复制我。 这可能是特定于平台的,我不知道。 但主要的目录,我复制,它复制文件,而不是它的目录。 因此,临时目录被忽略,而符号链接文件夹,然后被复制。 例如: mkdir tmp cd tmp ln -s ../Foo . ln -s ../Bar . cd .. adb push tmp /sdcard/ mkdir tmp cd tmp ln -s ../Foo . ln -s ../Bar . cd .. adb push tmp /sdcard/ mkdir tmp cd tmp ln -s ../Foo . ln -s ../Bar . cd .. adb push tmp /sdcard/它会推美孚/ file1复制到/ SD卡/富/文件1只需亚行推美孚/。 / SD卡/然后我结束了/ SD卡/文件1不使我快乐。



Answer 9:

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: Recursive copy with adb push
标签: android adb