Ich habe dazu ein kleines Skript geschrieben, das Dateien nach dem Abrufen vom Gerät löscht:
#!/bin/sh
cleanup() {
[[ -n "$dest" ]] && cd "$OLDPWD" && rmdir --ignore-fail-on-non-empty "$dest"
}
trap cleanup EXIT
DIRS=( /storage/emulated/0/DCIM/Camera
/storage/emulated/0/Pictures/Office\ Lens )
dest=$(mktemp -d -p .) && cd $dest
echo output directory: $(pwd)
for dir in "${DIRS[@]}"
do
echo downloading from $dir
adb shell ls "'$dir'/*.jpg" 2>/dev/null | xargs -I{} -n 1 -d '\n' sh -c 'adb pull -a "$1" && adb shell rm "\"$1\"" && adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d \"file://$1\" || exit 255' -- {} || break
done
Der Hauptprozess ist eine Schleife, die einmal für jedes $dirangegebene Verzeichnis ausgeführt wird und $DIRSbeim ersten Fehler endet.
Die breakVerhindert die Verarbeitung im Fall eines Fehlers , so dass das Script beendet auf dem ersten Fehler.
Die Schleife führt einen zusammengesetzten Befehl für jedes Verzeichnis aus, das in $DIRSals aufgeführt ist $dir. Das erste Stück ist unkompliziert:
ls "'$dir'/*.jpg" 2>/dev/null
Es macht das, was es verspricht - listet alle JPEG-Dateien auf, die sich unter befinden $dir. Das 2>/dev/nullverbirgt die No such file or directoryFehlermeldung, die sonst angezeigt würde, wenn keine solchen Dateien vorhanden wären.
Die Ausgabe von lswird weitergeleitet in xargs- die Argumente, die {}als Platzhalter, \nals Trennzeichen festgelegt sind, und verarbeitet Dateien nacheinander. Die Befehlszeile zur Verarbeitung jeder Datei lautet wie folgt:
sh -c 'adb pull -a "$1" && adb shell rm "\"$1\"" && adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d \"file://$1\" || exit 255' -- {}
Dies ist selbst ein zusammengesetzter Befehl aus drei adbBefehlen, die von einer shShell ausgeführt werden , die die Datei als Argument ( $1) erhält, das durch ihren {}Platzhalter angegeben wird .
Der erste Befehl lädt die Datei herunter:
adb pull -a "$1"
Wenn dies erfolgreich ist, entfernt der zweite Befehl die Datei vom Android-Gerät:
adb shell rm "\"$1\""
Das zusätzliche Anführungszeichen ist erforderlich, damit Dateinamen, die Leerzeichen enthalten, ordnungsgemäß an das übergeben werden adb shell. Wenn dieser Befehl erfolgreich ist, teilt der letzte Befehl dem Gerät mit, dass die Datei nicht mehr vorhanden ist:
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d \"file://$1\"
Es wird erneut ein Angebot beantragt adb shell. Dieser Schritt ist erforderlich, um die in der Galerie- App aufgelisteten Bilder zu aktualisieren (andernfalls werden sie möglicherweise zwischengespeichert und weiterhin angezeigt).
Der zusammengesetzte Befehl endet mit exit 255dem Fall, dass einer der adbBefehle fehlschlägt. Dies hat eine besondere Bedeutung xargsund führt dazu, dass es beendet wird, ohne dass weitere Dateien verarbeitet werden.
Dies ist ein schnelles und schmutziges Skript - es könnte wahrscheinlich verbessert werden, aber hoffentlich ist es hilfreich, wie es ist.