GuidePublished: 4 min read

Browse and Transfer Android Files with ADB (Push, Pull)

Copy files to and from Android with adb push and pull, read ls -l permissions, and browse the whole filesystem in the ADBKit file explorer.

Use adb push to copy a file from your computer to an Android device and adb pull to copy one back. To look around the filesystem, use adb shell ls -l. This works over USB without a file-transfer app, and a browser file explorer such as ADBKit gives you the same result with a graphical view.

Copy files with adb push and pull

Connect the phone with USB debugging on and confirm it shows up in adb devices.

adb push photo.jpg /sdcard/Download/
adb push my-folder /sdcard/Download/my-folder
adb pull /sdcard/Download/report.pdf
adb pull /sdcard/DCIM/Camera ./camera-backup

The first argument is the source and the second is the destination. If you leave the destination off adb pull, the file is saved in your current directory. Folders are copied recursively. Paths with spaces need quotes:

adb pull "/sdcard/Download/My File.pdf"

adb push and adb pull print a transfer summary when they finish. If several devices are connected, add -s <serial> to choose one.

List files with adb shell ls

adb shell ls /sdcard/
adb shell ls -l /sdcard/Download
adb shell ls -la /sdcard/

ls -l gives the long format, and -a includes hidden entries that start with a dot. Output looks like this:

drwxr-xr-x  2 root  sdcard_rw  4096 2026-10-06 10:15 Download
-rw-rw----  1 root  sdcard_rw  81920 2026-10-06 10:16 notes.txt
lrwxrwxrwx  1 root  root          10 2026-10-06 10:00 sdcard -> /storage/self/primary

Understanding the permission string

Take drwxr-xr-x. The first character is the type, followed by three groups of three characters.

PartMeaning
dDirectory (- is a regular file, l a symlink)
rwx (first group)Owner may read, write, execute
r-x (second group)Group may read and execute, not write
r-x (third group)Everyone else may read and execute

After the permissions come the link count, the owner, the group, the size, the modification time and the name. On Android, owner and group are often names like root, system, shell or a per-app identity such as u0_a123, because each installed app runs as its own Linux user.

Note: Android also applies SELinux, a second layer of access control. Even a file with permissive-looking bits can be blocked by policy. To see the SELinux label, add -Z: adb shell ls -Z /sdcard.

/sdcard versus /data

/sdcard is the user-visible shared storage: Downloads, DCIM (photos), Documents and similar folders. It is the right place to push and pull ordinary files, and it is available to the shell user that adb uses.

/data holds app and system data. Each app has its own private directory under /data/data/<package-name> (also reachable as /data/user/0/...). Other users cannot read it, including adb's shell user, so on a normal production phone these commands fail with "Permission denied":

adb shell ls /data/data
adb pull /data/data/com.example.app/databases/app.db

Reading private app data generally needs root access, or the app must be a debuggable build you can reach with adb shell run-as com.example.app. Rooting is a device-specific choice with its own risks and is outside the scope of this guide.

Warning: Do not delete or edit files outside /sdcard unless you know exactly what they do. Changes to system areas can stop the phone from booting properly.

Browse files in ADBKit

The ADBKit workspace has a file explorer that runs in a Chromium-based desktop browser (Chrome or Edge), with no install and no account. After you connect over USB, it starts at the root, /, and lets you walk the whole tree.

What you get:

  • Listing details for each entry: owner, group, permissions, and symlinks shown as such.
  • Thumbnails for image files, so you can recognize photos without opening them.
  • Details popup, opened by right-click (or long-press on touch), for a closer look at a single entry.
  • Upload from your computer and download to your computer, the browser equivalents of push and pull.

Files travel only between the browser and your phone; ADBKit has no server that receives them. The same permission rules apply as with the command line: directories such as /data/data will list as unreadable on an ordinary phone. If you need to put an app on the device rather than a file, see install an APK with ADB. The adb commands cheat sheet collects the other commands you may want alongside these.

Common problems

  • "No such file or directory": check capitalization; Android paths are case-sensitive.
  • "Permission denied": the path is private to another user; use /sdcard or a debuggable app with run-as.
  • Slow transfers: very large folders with thousands of small files are slower than a few large files. Archive the folder first if speed matters.
  • Device not found: see fixing ADB busy, unauthorized and no-device errors.