3 votes

script pour tirer du répertoire contenant des espaces.

J'essaie de tirer des images Whatsup de mon téléphone Android via ADB en utilisant le script suivant :

HOST_DIR=/myImageDirectory
DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp\ Images"
echo started
for file in $(./adb shell ls $DEVICE_DIR)
do
    file=$(echo -e $file | tr -d "\r\n"); # EOL fix
echo $file  
    ./adb pull $DEVICE_DIR/$file $HOST_DIR/;
done

L'espace dans le répertoire source est échappé avec succès pour ls mais pas pour pull. En d'autres termes, j'obtiens la liste des fichiers mais je ne peux pas les extraire. Voici 3 lignes de la sortie :

IMG-20171101-WA0003.jpg
adb: error: remote object '/sdcard/WhatsApp/Media/WhatsApp\' does not exist
adb: error: remote object 'Images/IMG-20171101-WA0003.jpg' does not exist

Qu'est-ce qui se passe ?

2voto

Guillermo Gomez Points 423

Obtenez des guillemets :

for file in $(./adb shell ls \""$DEVICE_DIR"\")
                               ^           ^

./adb pull "$DEVICE_DIR/$file" $HOST_DIR/;
           ^                 ^

Et supprimez les escapes de backslash :

DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp Images"
                                           ^

0 votes

Merci, ça a fait l'affaire ! J'obtiens maintenant une erreur différente : adb : error : remote object '/.... /WhatsApp\ Images/IMG-20171031-WA0000.jpg' n'existe pas. Mais je peux extraire un fichier à la fois, il existe clairement.

0 votes

@Ivana Mis à jour. Suppression des échappements de barres obliques inversées car c'est contre-productif dans les chaînes citées.

0 votes

@iBug J'ai l'habitude de mettre `IFS=$'. \n avant de jouer avec les espaces, afin d'éviter les maux de tête. Vous pouvez ajouter ce point dans votre réponse.

0voto

Ivana Points 123

La réponse d'iBug résout le premier problème mais en crée un autre. L'astuce est de ne pas mettre de guillemets autour du nom du répertoire, et de ne les ajouter qu'autour de la variable répertoire, comme ceci :

HOST_DIR=/myImageDirectory
DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp\ Images"
DEVICE_DIR_noescape=/sdcard/WhatsApp/Media/WhatsApp\ Images
echo started
for file in $(./adb shell ls $DEVICE_DIR)
do
    file=$(echo -e $file | tr -d "\r\n"); # EOL fix
    echo $file  
    ./adb pull "$DEVICE_DIR_noescape/$file" $HOST_DIR/;
done

Et je dois effectivement nettoyer le code, mais cela fonctionne.

0 votes

IBug a déjà mis à jour sa réponse - la vôtre prête à confusion, d'autant plus que vous mélangez citation et échappement. Comme vous voulez essentiellement dire la même chose : ne seriez-vous pas d'accord pour dire que la réponse d'iBug est suffisante ?

0voto

tester Points 1

Pour la commande ADB (pas le shell) avant et après l'entrée SPACE " exemple adb pull /sdcard/Wi-Fi" "Direct /C:/1/".

résultats des fichiers du dossier "Wi-fi Direct" copiés dans le dossier 1 du disque dur C

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X