Tecnología · GUÍA PRÁCTICA
Convierte un listado MLSD de FileZilla a CSV sin alterar los nombres
Conserva comas, punto y coma y espacios significativos, distingue tamaños ausentes de cero y mantén las entradas de directorio en una copia sin conexión.

Si ya copiaste un listado de directorio original de FileZilla, sustituir todos los puntos y coma por comas no crea un CSV fiable. Un punto y coma puede formar parte del nombre, y las comas o comillas del nombre necesitan un tratamiento correcto en CSV.
Esta guía convierte un único bloque MLSD capturado, sin conexión. Conserva nombres mostrados, tipos y atributos originales; no descarga archivos, modifica el servidor, crea un inventario recursivo ni demuestra que la captura sea completa.
Confirma primero que la copia sea datos MLSD
Usa tu conexión FTP o FTPS autorizada que ya funciona. La discusión original de soporte de FileZilla describe mostrar listados originales en la configuración de depuración. Si tu versión ofrece ese control, actívalo y actualiza solo la carpeta prevista. Confirma el comando MLSD y su finalización correcta en el registro, y anota aparte carpeta remota y hora. No hemos probado la interfaz actual de FileZilla.
Copia únicamente las entradas de datos de ese listado correcto a un archivo de texto UTF-8 llamado mlsd.txt. Un ejemplo es type=file;size=926; image.jpg. Conserva todos los caracteres del nombre, incluidos espacios iniciales y finales. El conversor acepta entradas originales o el prefijo inglés exacto Listing: seguido de un espacio; no incluyas horas, prefijos traducidos, mensajes de estado ni líneas separadoras vacías.
Detente si es texto Unix/DOS LIST, un listado SFTP, un objeto JSON del CLI, bytes sin decodificar o texto visiblemente corrupto. No adivines la codificación ni sobrescribas el registro original. El CLI moderno de FileZilla ofrece JSON estructurado, una alternativa válida para quien ya lo tenga, pero no es entrada para este conversor.
Convierte una copia en una terminal Bash de Linux
Usa Python 3.9 o posterior en una terminal Bash de Linux, en la carpeta de mlsd.txt. Copia el siguiente comando en una línea, conservando comillas rectas y barras inversas, y elige un nombre nuevo. Valida todos los registros antes de crear exclusivamente mlsd.csv; no modifica la entrada.
python3 -c "exec('import csv\\nimport sys\\n\\nrows = []\\nwith open(sys.argv[1], encoding=\"utf-8-sig\", newline=\"\") as source:\\n for number, raw in enumerate(source, 1):\\n line = raw.removesuffix(\"\\\\n\").removesuffix(\"\\\\r\")\\n if line.startswith(\"Listing: \"):\\n line = line[len(\"Listing: \"):]\\n facts, separator, name = line.partition(\" \")\\n if not separator or not name or (facts and not facts.endswith(\";\")):\\n raise ValueError(f\"Line {number}: expected one MLSD data entry\")\\n values = {}\\n for fact in facts[:-1].split(\";\") if facts else []:\\n key, equals, value = fact.partition(\"=\")\\n key = key.lower()\\n if not key or not equals or key in values or any(c.isspace() for c in fact):\\n raise ValueError(f\"Line {number}: malformed or duplicate fact\")\\n values[key] = value\\n size = values.get(\"size\", \"\")\\n if \"size\" in values and not (size.isascii() and size.isdecimal()):\\n raise ValueError(f\"Line {number}: invalid size\")\\n rows.append([name, values.get(\"type\", \"\"), size, values.get(\"modify\", \"\"), facts])\\nif not rows:\\n raise ValueError(\"No MLSD records: do not assume an empty directory\")\\nwith open(sys.argv[2], \"x\", encoding=\"utf-8-sig\", newline=\"\") as destination:\\n writer = csv.writer(destination)\\n writer.writerow([\"name\", \"type\", \"size_bytes\", \"modify_raw\", \"facts_raw\"])\\n writer.writerows(rows)\\nprint(len(rows), \"MLSD records exported; includes any directory entries\")\\n')" "mlsd.txt" "mlsd.csv"
Las cinco columnas son name, type, size_bytes, modify_raw y facts_raw. El primer espacio separa atributos del nombre; los siguientes espacios y puntos y coma del nombre quedan intactos. Las claves se comparan sin distinguir mayúsculas, pero facts_raw conserva escritura, orden y valores originales. Un tamaño ausente queda vacío; un cero devuelto sigue siendo 0.
Importa como texto y verifica los registros capturados
En LibreOffice Calc abre el CSV con UTF-8, coma y comillas dobles rectas como delimitador de texto. Desactiva Combinar delimitadores, Recortar espacios y Evaluar fórmulas; configura las cinco columnas como Texto. Si el diálogo no aparece, activa Editar configuración de filtros al abrir. Comprueba que nombres que empiezan por = sean texto literal, no fórmulas.
Compara el recuento impreso con las filas interpretadas del CSV, sin cabecera, y varios nombres y atributos exactos con el texto guardado. Conserva cdir, pdir y dir: describen directorios, por lo que los registros no equivalen a archivos. Un type ausente sigue siendo desconocido. Se conservan nombres repetidos porque un servidor puede devolver varios tipos para una misma ruta; no elimines duplicados automáticamente.
Entiende los errores y lo que los metadatos no prueban
Una entrada vacía, registros malformados, claves duplicadas o tamaños proporcionados inválidos detienen la ejecución antes de crear salida. Si el destino existe, elige otro nombre. Un fallo de disco o escritura puede dejar un CSV parcial: descártalo, ejecuta de nuevo con otro nombre y compara las filas interpretadas. Aunque el servidor no devuelva entradas, el conversor rehúsa certificar un inventario vacío.
El tamaño es un dato del servidor, posiblemente aproximado; ausente no es cero y el tamaño de un directorio no es su total recursivo. modify_raw es texto sin convertir del servidor, no prueba de contenido intacto. El analizador no detecta una línea válida omitida al copiar. Comprueba tú la captura correcta, conserva el registro original y comparte solo los metadatos previstos.
Ejecutamos 17 comprobaciones sintéticas de subprocesos con este comando Bash exacto, incluyendo puntuación, Unicode, espacios significativos, atributos opcionales, directorios, entradas inválidas y rechazo de sobrescritura. No ejecutamos FileZilla real, un servidor FTP o Calc, ni probamos Windows o macOS. Las dos ilustraciones son ejemplos hipotéticos, no capturas de pantalla.
