Move Files to Android from Linux with ADB
I recently needed to move a few files onto an Android device.
Normally, this should be boring. Copy file, paste file, done.
But on Android, especially on TV boxes or devices without a great built-in file manager, it quickly turns into one of those tiny annoying tasks. Install some random file explorer. Give it storage permissions. Hope it does not show ads. Maybe use Google Drive. Maybe send the file to myself. Maybe plug the device into a computer and deal with whatever file transfer mode Android feels like exposing today.
I did not want any of that.

Then I found out that there was a way to do this with ADB.
ADB, or Android Debug Bridge, is usually introduced as a developer tool. But for this use case, I do not care about Android development at all. I just want a clean way to move files from my Linux terminal to an Android device.
Once ADB is enabled, Android storage starts to feel like a remote machine. I can list folders, push files, pull files back, create directories, delete files, and even install APKs — all without installing another file manager app.
The Android setting may be called USB debugging or Wireless debugging, depending on the device. I will call it USB/Wireless debugging here. The name is not the important part. The important part is enabling ADB access.
After that, the workflow is simple:
adb connect 192.168.1.50:5555
adb push ~/Downloads/book.epub /sdcard/Download/ebooks/
adb shell ls -la /sdcard/Download/ebooks/
That is the whole reason I like this approach. No extra Android app. No cloud upload. No GUI file transfer. Just a terminal and a few commands.
Basic setup
Enable Developer Options on Android:
Settings → About device → Build number → tap 7 times
Then enable USB/Wireless debugging:
Settings → Developer options → USB/Wireless debugging
Install ADB on Linux:
# Ubuntu / Debian
sudo apt install adb
# Fedora
sudo dnf install android-tools
# Arch Linux
sudo pacman -S android-tools
Common ADB file commands
# Connect to an Android device over the network.
# Replace the IP address with your device IP.
adb connect 192.168.1.50:5555
# Disconnect from all connected ADB devices.
adb disconnect
# Disconnect from one specific Android device.
adb disconnect 192.168.1.50:5555
# Open an interactive shell on the Android device.
adb shell
# List files in Android shared storage.
adb shell ls /sdcard/
# Copy a local file to Android Documents.
adb push notes.txt /sdcard/Documents/
# Copy one file from Android to the current Linux directory.
adb pull /sdcard/Download/example.pdf .
# Create a folder on Android.
adb shell mkdir /sdcard/Download/ebooks
# Create a nested folder on Android.
adb shell mkdir -p /sdcard/Download/ebooks/fiction
# Delete one file from Android.
adb shell rm /sdcard/Download/example.pdf
# Delete a folder and everything inside it.
# Be careful. This does not move files to a trash bin.
adb shell rm -r /sdcard/Download/my-folder
# Show file size and disk usage for a folder.
adb shell du -h /sdcard/Download/
# Show available disk space.
adb shell df -h
# Install an APK from Linux to Android.
# Only install APKs you trust.
adb install app.apk
# Reinstall or update an APK while keeping app data.
adb install -r app.apk
# List installed packages.
adb shell pm list packages
# Search installed packages by keyword.
adb shell pm list packages | grep firefox
# Uninstall an app by package name.
# Example package name only.
adb uninstall org.mozilla.firefox
# Restart the ADB server on Linux.
adb kill-server
adb start-server
# Reboot the Android device.
adb reboot
My usual workflow
Most of the time, I only need this:
# Connect to the Android device.
adb connect 192.168.1.50:5555
# Check that ADB sees it.
adb devices
# Create a folder.
adb shell mkdir -p /sdcard/Download/ebooks
# Copy a file to Android.
adb push ~/Downloads/book.epub /sdcard/Download/ebooks/
# Confirm the file exists.
adb shell ls -la /sdcard/Download/ebooks/
Final thoughts
ADB is usually treated as something only Android developers need, but I think it is underrated as a normal file transfer tool.
For me, the win is not that ADB is fancy. It is the opposite. It is boring in the best way.
I do not need to install a random file manager. I do not need to upload private files to a cloud drive just to download them again. I do not need to fight with a TV remote to move files around.
I can stay on my Linux machine, run a few commands, and put the file exactly where I want it.
That is enough.