How to Move qBittorrent Downloads to Another Storage Location Without Losing Seeding or Jellyfin Indexing

In this post, I’ll show how to properly configure qBittorrent and Jellyfin in Docker so that:

  • qBittorrent downloads files to a temporary directory;
  • after finishing, it automatically moves them to another storage location;
  • keeps seeding the files;
  • Jellyfin continues indexing the content without issues.

1. Folder Structure

Assume the following paths:

  • Temporary downloads: /srv/dev-disk-by-uuid-801ed916.../Torrent/temp
  • Completed downloads: /srv/dev-disk-by-uuid-4968aa9b.../Storage/Media

In Docker:

downloads: /downloads
completed: /completed
media (for Jellyfin): /media

2. Docker: volumes in docker-compose.yml

qBittorrent:

volumes:
  - /srv/dev-disk-by-uuid-801ed916.../Torrent:/downloads
  - /srv/dev-disk-by-uuid-4968aa9b.../Storage:/completed

Jellyfin:

volumes:
  - /srv/dev-disk-by-uuid-4968aa9b.../Storage:/media

3. qBittorrent Configuration via Web UI

  • Save to location: /downloads/temp
  • Move completed downloads to: /completed/Media
  • “Keep incomplete torrents in” — should not be enabled!

Once downloads finish, qBittorrent will automatically move them and continue seeding from the new location.


4. Move Already Downloaded Files Manually

1. Stop qBittorrent:

docker stop qbittorrent

2. Move files to the new disk:

mv /srv/dev-disk-by-uuid-801ed916.../Torrent/*.mkv \
   /srv/dev-disk-by-uuid-4968aa9b.../Hdd16Gb/Media/

3. Start qBittorrent:

docker start qbittorrent

4. Update paths per torrent in the Web UI:

Right-click → Set location → Select /completed/Media/filename

qBittorrent will resume seeding the same files from the new location.


5. Jellyfin: Update Library

  1. Go to the Jellyfin admin dashboard
  2. Navigate to “Libraries”
  3. Add the path /media/Media
  4. Start a manual scan

Jellyfin will re-index the files from the new storage location; watch history will not be lost.


6. Automate Moving Completed Torrents

Below is a sample bash script that automates moving completed files from the temporary download directory to the final storage location and updates the torrent paths accordingly in qBittorrent:

#!/bin/bash

SRC="/srv/dev-disk-by-uuid-801ed916.../Torrent/temp"
DST="/srv/dev-disk-by-uuid-4968aa9b.../Storage/Media"

# Stop qBittorrent container
docker stop qbittorrent

# Move only completed files (example: .mkv, .mp4, etc)
find "$SRC" -type f \( -iname '*.mkv' -o -iname '*.mp4' -o -iname '*.avi' \) -exec mv {} "$DST" \;

# Start qBittorrent again
docker start qbittorrent

# Optionally, notify user
echo "Files moved from $SRC to $DST and qBittorrent restarted."

You can set this up as a cron job or trigger it manually whenever needed.


Conclusion

  • Downloads: qBittorrent → /downloads/temp
  • Finished: auto-moved to → /completed/Media
  • Seeding continues
  • Jellyfin sees everything under /media/Media

This setup allows you to scale by adding large disks without losing data or re-downloading torrents.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.