diff --git a/src/main/java/fil/sr2/flopbox/FTPResource.java b/src/main/java/fil/sr2/flopbox/FTPResource.java
index eb95dc0500c12fee801a760674edd7e92feeebbe..480ac5fb0e10f66e6b1f8630da3ae9e02e17022e 100644
--- a/src/main/java/fil/sr2/flopbox/FTPResource.java
+++ b/src/main/java/fil/sr2/flopbox/FTPResource.java
@@ -65,7 +65,7 @@ public class FTPResource {
                 List<String> urls = new ArrayList<>();
                 // Parcourir récursivement l’arborescence pour chercher le fichier (ou
                 // répertoire) recherché
-                searchInTree(tree, searchTerm, "", config, urls);
+                ftpService.searchInTree(tree, searchTerm, "", config, urls);
                 if (!urls.isEmpty()) {
                     results.put(config.getAlias(), urls);
                 }
@@ -77,34 +77,6 @@ public class FTPResource {
         return Response.ok(results).build();
     }
 
-    /**
-     * Recherche récursive dans l’arborescence FTP.
-     *
-     * @param node        l’arborescence à parcourir
-     * @param searchTerm  la chaîne à rechercher
-     * @param currentPath le chemin courant dans l’arborescence
-     * @param config      la configuration du serveur FTP (pour construire l’URL)
-     * @param urls        la liste des URLs trouvées
-     */
-    private void searchInTree(FTPService.FtpNode node, String searchTerm, String currentPath, FTPServerConfig config,
-            List<String> urls) {
-        // Concaténation du chemin
-        String newPath = currentPath.isEmpty() ? node.name : currentPath + "/" + node.name;
-        // Si le nom contient le terme recherché (fichier ou dossier)
-        if (node.name.toLowerCase().contains(searchTerm.toLowerCase())) {
-            // Construction de l’URL FTP. On suppose que FTPServerConfig possède une méthode
-            // getHost().
-            String ftpUrl = "ftp://" + config.getHost() + "/" + newPath;
-            urls.add(ftpUrl);
-        }
-        // Parcours des enfants si le nœud est un répertoire
-        if (node.isDirectory && node.children != null) {
-            for (FTPService.FtpNode child : node.children) {
-                searchInTree(child, searchTerm, newPath, config, urls);
-            }
-        }
-    }
-
     @DELETE
     @Path("/{alias}")
     public Response removeFTPServer(@PathParam("alias") String alias) {
diff --git a/src/main/java/fil/sr2/flopbox/FTPService.java b/src/main/java/fil/sr2/flopbox/FTPService.java
index 7e7bcd2eccc7a8c99ef4c801bd8ba13396b91234..fa337b72c49e4042974891dc925a81cab87a2715 100644
--- a/src/main/java/fil/sr2/flopbox/FTPService.java
+++ b/src/main/java/fil/sr2/flopbox/FTPService.java
@@ -371,4 +371,32 @@ public class FTPService {
             }
         }
     }
+
+    /**
+     * Recherche récursive dans l’arborescence FTP.
+     *
+     * @param node        l’arborescence à parcourir
+     * @param searchTerm  la chaîne à rechercher
+     * @param currentPath le chemin courant dans l’arborescence
+     * @param config      la configuration du serveur FTP (pour construire l’URL)
+     * @param urls        la liste des URLs trouvées
+     */
+    public void searchInTree(FTPService.FtpNode node, String searchTerm, String currentPath, FTPServerConfig config,
+            List<String> urls) {
+        // Concaténation du chemin
+        String newPath = currentPath.isEmpty() ? node.name : currentPath + "/" + node.name;
+        // Si le nom contient le terme recherché (fichier ou dossier)
+        if (node.name.toLowerCase().contains(searchTerm.toLowerCase())) {
+            // Construction de l’URL FTP. On suppose que FTPServerConfig possède une méthode
+            // getHost().
+            String ftpUrl = "ftp://" + config.getHost() + "/" + newPath;
+            urls.add(ftpUrl);
+        }
+        // Parcours des enfants si le nœud est un répertoire
+        if (node.isDirectory && node.children != null) {
+            for (FTPService.FtpNode child : node.children) {
+                searchInTree(child, searchTerm, newPath, config, urls);
+            }
+        }
+    }
 }