Eu não uso, adbmas a partir dos documentos pullpode ser usado para puxar um diretório inteiro ?? Se for esse o caso e esses arquivos forem gerados pelo seu próprio aplicativo, por que não gravá-los em um subdiretório como /sdcard/mygpsfilese usar adb pull /sdcard/mygpsfiles. Isso funcionaria?
Squonk
2
Como alternativa, acabei de experimentar o File Explorer na DDMSperspectiva do eclipse e fui capaz de selecionar vários arquivos do meu sdcard e executar um pullneles. Se você não usa o eclipse, o DDMS está disponível como uma ferramenta SDK separada.
Squonk
monitorcomando funciona muito bem, deve estar dentro <sdkdir>/tools!
Santosh Kumar
Respostas:
141
Você pode usar xargse o resultado do adb shell lscomando que aceita curingas. Isso permite que você copie vários arquivos. Irritantemente, a saída do adb shell lscomando inclui caracteres de controle de alimentação de linha que você pode remover usando tr -d '\r'.
FYI: Windows e DOS usam "\ r \ n" para pares de retorno de carro / alimentação de linha (ou seja, não "\ n \ r").
BrainSlugs83
3
no meu caso, falhou ao tentar puxar os nomes de arquivo (obtidos corretamente) do diretório raiz do android, para resolvê-lo, usei:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
rupps
4
Não adianta
Suncatcher
101
adb pull pode receber um nome de diretório em vez de no arquivo e puxará o diretório com todos os arquivos nele.
Puxe todos os seus rastreamentos de GPS em / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Exemplo de adb pulle adb pushde diretórios recursivos:
@kakyo Isso funciona para subpastas para mim. verifique se você tem o ADB mais recente do google. (Estou usando 1.0.29)
Ofir Luzon
Sim, descobri que funciona para pastas não vazias no final. Eu tinha algumas pastas vazias que não foram retiradas. Além disso, parece que "push" não é recursivo?
kakyo
@kakyo Eu adicionei a saída de um pull e push recursivo para minha resposta. Você está correto sobre as pastas vazias, elas não são puxadas ou enviadas.
Ofir Luzon
1
Cuidado: com o pull do ADB, os arquivos perdem a data de modificação original.
Stan
3
@Stan: a menos que você use a opção "-a" como em "adb pull [-a] <remote> ... <local>", que de acordo com a ajuda preserva o timestamp e o modo do arquivo.
Rusty Gear
27
./adb pull /sdcard <- falha
./adb pull /sdcard/ <- funciona recursivamente - observe a barra final
Testado com Nexus 5 e adb baixado em março de 2014.
Na minha máquina, precisei usar o caminho completo para o adb, mas por outro lado funcionou muito bem!
Dan J
Esta resposta é realmente muito inteligente. Bom trabalho!
Darth Egregious de
6
Mesmo que o adb pullcomando comece a aceitar o nome da pasta para o parâmetro remoto, ainda prefiro usar o tarcomando. Ele fornece mais flexibilidade - permite padrões de nome de arquivo (tanto incluir como excluir ), controle de link simbólico, preserva permissões de arquivo. Desde o Android 6.0 você pode usar um built-in. Antes disso, você precisava usar ferramentas de terceiros como busybox:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Certifique-se de omitir a liderança /em seu caminho.
Oh, não funcionou. tar -tvf me diz que o resultado não parece um arquivo tar. Ah bem.
themuddler
Maneira muito forte! Mas o problema são erros / avisos como "tar: removendo '/' inicial dos nomes dos membros" adicionados ao arquivo de saída. Não sei como eliminar isso.
x'ES
Recebo arquivo de 1,5 KB na saída.
Shayan
5
Eu criei isso para caixas do Windows, é muito útil para transferir arquivos usando curingas sem montar o sistema de arquivos. Você pode incluir este script em algum lugar em seu env de caminho.
adbpull.bat
@echo off
setlocal enabledelayedexpansion
if %1.==. (
echo Wilcard parameter is required.
gotoend
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
settext=%%F
set mfile=!text:~0,-1!
adb pull "!mfile!"
)
:end
endlocal
Além de ser um caractere a menos para digitar (grande coisa), ele não converte o -rem um espaço. Esta é uma diferença significativa, como se você tentasse fazer
Os curingas funcionam no meu caso, tenho usado o seguinte script simples para importar imagens do Whatsapp do meu dispositivo virtual para o meu desktop
Você usa curingas para cp no Android e não para pull no host, é por isso que funciona. Boa alternativa, embora copiar para / sdcard / custe memória extra e vaze arquivos privados para sdcard.
user905686
0
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
adb
mas a partir dos documentospull
pode ser usado para puxar um diretório inteiro ?? Se for esse o caso e esses arquivos forem gerados pelo seu próprio aplicativo, por que não gravá-los em um subdiretório como/sdcard/mygpsfiles
e usaradb pull /sdcard/mygpsfiles
. Isso funcionaria?DDMS
perspectiva do eclipse e fui capaz de selecionar vários arquivos do meu sdcard e executar umpull
neles. Se você não usa o eclipse, o DDMS está disponível como uma ferramenta SDK separada.monitor
comando funciona muito bem, deve estar dentro<sdkdir>/tools
!Respostas:
Você pode usar
xargs
e o resultado doadb shell ls
comando que aceita curingas. Isso permite que você copie vários arquivos. Irritantemente, a saída doadb shell ls
comando inclui caracteres de controle de alimentação de linha que você pode remover usandotr -d '\r'
.Exemplos:
adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull
fonte
adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
adb pull
pode receber um nome de diretório em vez de no arquivo e puxará o diretório com todos os arquivos nele.Puxe todos os seus rastreamentos de GPS em / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Exemplo de
adb pull
eadb push
de diretórios recursivos:C:\Test>adb pull /data/misc/test/ . pull: building file list... pull: /data/misc/test/test1/test2/test.3 -> ./test1/test2/test.3 pull: /data/misc/test/test1/test2/test.2 -> ./test1/test2/test.2 pull: /data/misc/test/test1/test2/test.1 -> ./test1/test2/test.1 pull: /data/misc/test/test1/test.3 -> ./test1/test.3 pull: /data/misc/test/test1/test.2 -> ./test1/test.2 pull: /data/misc/test/test1/test.1 -> ./test1/test.1 pull: /data/misc/test/test.3 -> ./test.3 pull: /data/misc/test/test.2 -> ./test.2 pull: /data/misc/test/test.1 -> ./test.1 9 files pulled. 0 files skipped. 0 KB/s (45 bytes in 0.093s) C:\Test>adb push . /data/misc/test/ push: ./test1/test2/test.3 -> /data/misc/test/test1/test2/test.3 push: ./test1/test2/test.2 -> /data/misc/test/test1/test2/test.2 push: ./test1/test2/test.1 -> /data/misc/test/test1/test2/test.1 push: ./test1/test.3 -> /data/misc/test/test1/test.3 push: ./test1/test.2 -> /data/misc/test/test1/test.2 push: ./test1/test.1 -> /data/misc/test/test1/test.1 push: ./test.3 -> /data/misc/test/test.3 push: ./test.2 -> /data/misc/test/test.2 push: ./test.1 -> /data/misc/test/test.1 9 files pushed. 0 files skipped. 0 KB/s (45 bytes in 0.062s)
fonte
./adb pull /sdcard
<- falha./adb pull /sdcard/
<- funciona recursivamente - observe a barra finalTestado com Nexus 5 e adb baixado em março de 2014.
fonte
Analisar a saída de 'ls' geralmente é uma má ideia. Em vez disso, use 'localizar'.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Por que você não deve analisar a saída de ls
fonte
Mesmo que o
adb pull
comando comece a aceitar o nome da pasta para o parâmetro remoto, ainda prefiro usar otar
comando. Ele fornece mais flexibilidade - permite padrões de nome de arquivo (tanto incluir como excluir ), controle de link simbólico, preserva permissões de arquivo. Desde o Android 6.0 você pode usar um built-in. Antes disso, você precisava usar ferramentas de terceiros comobusybox
:adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Certifique-se de omitir a liderança
/
em seu caminho.fonte
Eu criei isso para caixas do Windows, é muito útil para transferir arquivos usando curingas sem montar o sistema de arquivos. Você pode incluir este script em algum lugar em seu env de caminho.
adbpull.bat
@echo off setlocal enabledelayedexpansion if %1.==. ( echo Wilcard parameter is required. goto end ) for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do ( set text=%%F set mfile=!text:~0,-1! adb pull "!mfile!" ) :end endlocal
Exemplo:
adbpull /sdcard/DCIM/Camera/IMG_2016*
fonte
ADBFS, um sistema de arquivos FUSE para Android Debug Bridge se você estiver usando Linux ou Mac
fonte
O pull de diretório está disponível em novas ferramentas do Android. (Não sei de qual versão foi adicionado, mas está funcionando no último ADT 21.1)
adb pull /sdcard/Robotium-Screenshots pull: building file list... pull: /sdcard/Robotium-Screenshots/090313-110415.jpg -> ./090313-110415.jpg pull: /sdcard/Robotium-Screenshots/090313-110412.jpg -> ./090313-110412.jpg pull: /sdcard/Robotium-Screenshots/090313-110408.jpg -> ./090313-110408.jpg pull: /sdcard/Robotium-Screenshots/090313-110406.jpg -> ./090313-110406.jpg pull: /sdcard/Robotium-Screenshots/090313-110404.jpg -> ./090313-110404.jpg 5 files pulled. 0 files skipped. 61 KB/s (338736 bytes in 5.409s)
fonte
com base na resposta de David, acho que isso é um pouco melhor:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
Além de ser um caractere a menos para digitar (grande coisa), ele não converte o
-r
em um espaço. Esta é uma diferença significativa, como se você tentasse fazeradb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
você obterá um erro dizendo
remote object '/foo/myFile1 ' does not exist
Em vez disso, você pode fazer isso, o que funcionará:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
fonte
Os curingas funcionam no meu caso, tenho usado o seguinte script simples para importar imagens do Whatsapp do meu dispositivo virtual para o meu desktop
#! /bin/bash mkdir -p ~/Pictures/Pictures_adb rm -f ~/Pictures/Pictures_adb/* cd ~/Pictures/Pictures_adb adb root adb shell 'cp /data/media/0/WhatsApp/Media/WhatsApp\ Profile\ Photos/* /sdcard/Pictures/;exit' adb pull /sdcard/Pictures mv ~/Pictures/Pictures_adb/Pictures/* ~/Pictures/Pictures_adb/ rmdir ~/Pictures/Pictures_adb/Pictures cd
fonte
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
fonte
No Android, existem algumas pastas com permissões associadas! Algumas pastas pertencem ao usuário root ou do sistema.
Vocês devem alterar as permissões desses arquivos, pastas antes de fazer "adb pull".
Os seguintes comandos podem ajudar:
adb shell su chmod -R 777 target_folder exit ... adb pull /.../target_folder/ . (current local folder)
fonte