Como faço para adb puxar TODOS os arquivos de uma pasta presente no cartão SD

110

Tenho uma pasta no meu cartão SD como: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

O nome da Pasta1 e Pasta2 permanece constante e dentro da Pasta2 eu ​​tenho Pasta3, 4, 5 e assim por diante .. Eu quero puxar todos os arquivos jpeg em vez de todos os arquivos (há mais) usando adb para meu diretório atual no computador. .

Cada pasta tem um número diferente de arquivos jpeg e outros arquivos e tentei usar isto:

adb pull mnt/sdcard/Folder1/Folder2/Folder/*.jpg .

Mas não funcionou .. Então uhmm como faço para puxar todos os arquivos presentes em qualquer pasta do cartão SD com um único comando (comando único porque cada pasta tem um número diferente de arquivos)

riteshtch
fonte
Você está no Linux ou no Windows? Isso pode ser resolvido com um script simples?
Jared Burrows,
Hmm, eu tenho o Android Developement Stuff instalado em: Win7 e também no Ubuntu .. se houver solução para ambos, muito bem ..! Mas na realidade eu preciso apenas para Ubuntu (instalado como uma VM) .. então uhmm sim, estou no Ubuntu ..
riteshtch
você pode marcar uma resposta correta para esta pergunta?
Jared Burrows,

Respostas:

143

Arquivo / pasta único usando pull:

adb pull "/sdcard/Folder1"

Resultado:

adb pull "/sdcard/Folder1"
pull: building file list...
pull: /sdcard/Folder1/image1.jpg -> ./image1.jpg
pull: /sdcard/Folder1/image2.jpg -> ./image2.jpg
pull: /sdcard/Folder1/image3.jpg -> ./image3.jpg
3 files pulled. 0 files skipped.

Arquivos / pastas específicos usando findde BusyBox:

adb shell find "/sdcard/Folder1" -iname "*.jpg" | tr -d '\015' | while read line; do adb pull "$line"; done;

Aqui está uma explicação:

adb shell find "/sdcard/Folder1" - use the find command, use the top folder
-iname "*.jpg"                   - filter the output to only *.jpg files
|                                - passes data(output) from one command to another
tr -d '\015'                     - explained here: http://stackoverflow.com/questions/9664086/bash-is-removing-commands-in-while
while read line;                 - while loop to read input of previous commands
do adb pull "$line"; done;         - pull the files into the current running directory, finish. The quotation marks around $line are required to work with filenames containing spaces.

Os scripts começarão na pasta superior e descerão recursivamente e encontrarão todos os arquivos "* .jpg" e os puxarão do telefone para o diretório atual.

Jared Burrows
fonte
10
adb pull /sdcardpara puxar tudo!
Ian Vaughan
@IanVaughan é um comando que uso com frequência e funciona para mim, mas gostaria que houvesse uma maneira de retirar tudo do cartão SD, mas excluir um dos subcaminhos
GµårÐïåñ
Será que o Android tem tar? Um tarpipe simples sobre o ADB permitiria uma extração bem granulada de arquivos e metadados, mas com exclusões. Se gzip / bzip2 também estiver lá, então um tarpipe compactado estará disponível :)
Mark K Cowan
Para versões modernas de adbvocê pode apenas especificar o diretório e a ferramenta irá puxar recursivamente tudo para você
DirkyJerky
@mark-k-cowan backup adb com compartilhado (sdcard) é cheio de bugs.
Smeterlink
72

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)
Palani
fonte
1
Eu tentei isso, mas só puxou alguns diretórios. Não tenho certeza de quais eram seus critérios.
acjay
2
Se você deseja obter uma pasta pertencente ao root , inicie uma adbsessão root (usando $ adb root).
MasterAM
execute o comando como root exatamente como @MasterAM disse! funcionou sem problemas! Felicidades!
Migisha
@acjay Pastas vazias são omitidas. Isso também é verdadeiro para pastas recursivas que estão vazias. Por exemplo /sdcard/folder1/folder2, resultará em folder1omissão se folder2estiver vazio e não houver outros arquivos em folder1.
MDMower
40

Por favor, tente apenas fornecer o caminho de onde você deseja puxar os arquivos. Acabei de obter os arquivos do sdcard, como

adb pull sdcard/

NÃO dê * gosto para ampliar a pesquisa ou para filtrar. ex: adb pull sdcard / *. txt -> isto é inválido.

basta dar adb pull sdcard /

Ilavarasan
fonte
Esta é uma solução muito mais limpa. É semanticamente melhor e preserva a estrutura do diretório também.
Mike
11
Observe que o trailing / importa .
adrin
Não precisei de barra final com adb versão 1.0.40
Variável miserável
6

Sim, apenas use a barra final para puxar recursivamente o diretório. Funciona para mim com o Nexus 5 e a versão atual do adb (março de 2014).

Postando como um convidado-convidado
fonte
Não precisei de barra final com adb versão 1.0.40
Variável miserável
Eu precisava da barra final no Android Debug Bridge versão 1.0.32 executando o Android Q no Google Pixel XL.
Rock Lee
2

No Android 6 com ADB versão 1.0.32, você deve colocar / atrás da pasta que deseja copiar. Por exemploadb pull "/sdcard/".

antimatéria
fonte
Não precisei de barra final com adb versão 1.0.40
Variável miserável
1

se você está usando o jellybean apenas inicie o cmd, digite adb devices para garantir que esteja legível, digite adb pull sdcard / sdcard_ (a data ou extra) <--- este arquivo precisa ser feito no diretório adb de antemão. LUCRO!

Em outras versões, digite adb pull mnt / sdcard / sdcard_ (a data ou extra)

Lembre-se de fazer o arquivo ou você vai sujar ou não vai funcionar.

EDward
fonte
1

Se você deseja obter um diretório com acesso restrito de um dispositivo com acesso root, você precisa reiniciar o adb como root: digite adb rootantes de puxar. Caso contrário, você obterá um erro dizendoremote object '/data/data/xxx.example.app' does not exist

naXa
fonte