El nombre del archivo se divide al escribir en un archivo csv

El nombre del archivo se divide al escribir en un archivo csv

Tengo un directorio en la carpeta del terminal. Estoy usando MobaXterm. Este directorio tiene una gran cantidad de archivos. Los nombres de los archivos son largos y tienen algunos caracteres no válidos. Un nombre de archivo de ejemplo es"Los tres Copresidentes (Indonesia, Liberia, Reino Unido) del Panel de Alto Nivel del Secretario General sobre la Agenda de Desarrollo Post-2015 - Media Stakeout-1861343067001.m4a". Escribo los nombres de los archivos en un archivo csv usando la siguiente línea de comando y hasta ahora estaba funcionando.

dir$ find . -type f  > names.csv

Pero esta vez, en lugar de una columna, el nombre del archivo se divide en varias columnas.

ingrese la descripción de la imagen aquí

Quiero el nombre completo solo en la columna A. Quiero escribir los nombres de los archivos originales, incluidas las comas. El mismo comando pudo escribir los nombres de archivos con comas para mis conjuntos de datos anteriores, la única diferencia es que esos nombres de archivos eran más cortos que este.

¿Cómo puedo solucionarlo?

Respuesta1

En Linux, GNU find tiene una -printfopción que imprimirá el nombre del archivo con un formato determinado; para importar a CSV, puede rodear el nombre del archivo con comillas dobles, algo como:

find . -type f -printf '"%p"\n'

Respuesta2

CSV significaValor separado por comas. Cuando la hoja de cálculo lee el archivo, interpreta las comas como divisores de campo. Reemplace las comas con algún otro separador, como un guión bajo, contr, así

$ tr ',' '-_' < input.csv | tr -d '"' 

Cuando lo importes, el Campo Uno no se dividirá.

Respuesta3

Hay diferentes versiones de CSV, pero una solución compatible con RFC 4180 que usa sed:

find . -type f | sed 's/"/""/g;s/\(.\+\)/"\1"/'

Esto reemplazará las instancias de "with ""y encapsulará las líneas no vacías con comillas dobles.

Respuesta4

La longitud del nombre del archivo no tiene ningún efecto aquí, excepto el separador predeterminado del motor de importación. Elija un carácter que nunca haya usado en sus nombres de archivos y utilícelo como separador CVS. Supongamos que esta elección es § (signo de sección). Su findcomando sería:

find . -type f -printf '§%p§\n' > names.csv

o si desea obtener el nombre del archivo sin su punto de partida:

find . -type f -printf '§%P§\n' > names.csv

Ahora, al importar su csv, especifique § como separador ingrese la descripción de la imagen aquí

información relacionada