La mayoría de los clientes FTP/SFTP no permiten borrar directorios que contengan archivos de manera recursiva (el equivalente a rm -r desde la consola). Esto significa que es necesario recorrer todo el árbol de directorio eliminando los archivos uno por uno. Algo impracticable si el directorio contiene una gran cantidad de archivos y subdirectorios anidados. Este artículo explica cómo utilizar lftp para eliminar archivos recursivamente sobre SFTP o FTP.



El asterisco (*) funciona como comodín y permite borrar muchos archivos simultáneamente (dentro de un mismo directorio) utilizando el subcomando rm del protocolo FTP. Sin embargo, el comando rm no permite borrar directorios (para ello se debe utilizar el subcomando rmdir, siempre y cuando el directorio esté vacío). La situación se agrava cuando existe un gran número de subdirectorios anidados, digamos una jerarquía o árbol de directorios un tanto compleja. Ya que, al no tener la capacidad de borrar directorios, tampoco no existe la opción -r (borrar recursivamente) para el subcomando rm del protocolo FTP/SFTP.

Veamos un ejemplo. Conectado a un servidor remoto vía SFTP, deseo borrar el directorio remoto admin:

sftp> ls -l
drwxr-xr-x    2 emiliano  users          68 Mar 19  2015 admin
drwxrwxrwx    2 emiliano  users          39 Mar 14  2017 data
drwxrwxrwx    3 emiliano  users        4096 Jul  6  2016 downloads
drwxr-xr-x    3 emiliano  users        4096 Mar 19  2015 images
drwxr-xr-x    2 emiliano  users        4096 Mar 19  2015 includes
drwxr-xr-x    2 emiliano  users          23 Mar 19  2015 pages

Al intentar borrarlo con rm o rmdir, falla debido a que no está vacío (contiene archivos):

sftp> rm admin
Removing /public_html/ac/admin
Couldn't delete file: Failure
sftp> rmdir admin
Couldn't remove directory: Failure

La única forma es ingresar dentro del directorio recorriendo el árbol, desde las hojas hacia la raíz, vaciando cada uno manualmente con rm * y luego rmdir (una vez vacío).

Esto es impracticable con decenas o cientos de directorios anidados en una estructura compleja. Afortunadamente el cliente lftp permite borrar de forma recursiva cual rm -r en una consola Unix.

lftp es un cliente para transferir archivos que permite operaciones avanzadas sobre los protocolos FTP y HTTP. Soporta los protocolos FTP, FTPS, HTTP, HTTPS, HFTP, FISH, SFTP, torrent y otros.

Para instalar lftp en Devuan, Debian y derivados, simplemente ejecutar el siguiente comando como superusuario:

# apt install lftp

Luego es posible conectarse a un host vía SFTP utilizando la siguiente sintaxis:

$ lftp sftp://emiliano@ftp.linuxito.com

Este cliente permite borrar recursivamente, entre otros comandos avanzados:

lftp emiliano@ftp.linuxito.com:/public_html/ac> rm -r admin
rm ok, 5 files removed

De esta forma es posible operar mucho más rápidamente sobre FTP/SFTP, especialmente al momento de borrar grandes cantidades de archivos:

lftp emiliano@ftp.linuxito.com:/public_html/ac> ls
drwxrwxrwx  emiliano/users      93 2019-08-15 09:23:11 .
drwxr-xr-x  emiliano/users    4096 2019-08-15 09:08:42 ..
-rw-r--r--  emiliano/users      47 2016-05-02 12:09:17 .htaccess
drwxrwxrwx  emiliano/users      39 2017-03-14 11:11:39 data
drwxrwxrwx  emiliano/users    4096 2016-07-06 08:29:57 downloads
drwxr-xr-x  emiliano/users    4096 2015-03-19 11:12:32 images
drwxr-xr-x  emiliano/users    4096 2015-03-19 10:37:04 includes
drwxr-xr-x  emiliano/users      23 2015-03-19 10:37:04 pages

Para más información sobre lftp consultar su página de manual (man lftp).


Tal vez pueda interesarte


Compartí este artículo