1 votos

Mueva las carpetas usando Terminal haciendo referencia a un archivo CSV

Tengo un archivo CSV que contiene los dos siguientes columnas:

  1. Columna a: De Directorio (por ejemplo /Volumes/Backup Plus/Salesforce/Order Test/OR-1000049439).

  2. Columna B: A un Directorio (por ejemplo /Volumes/Backup Plus/Salesforce/Opportunity Test/Q-DNYE20180508-2308).

Necesito escribir una secuencia de comandos en la Terminal que se reproducirá en bucle a través de la CSV y mover el directorio de la Columna en el directorio de La columna B. el resultado final sería el OR-1000049439 carpeta que residen en el interior de la Q-DNYE20180508-2308 carpeta). Hay unos 13.000 filas en las que necesito que esto ocurra.

Por favor alguien puede ayudarme sobre cómo hacer esto?

Aquí está una copia de las primeras filas en el archivo CSV:

enter image description here

Necesito la carpeta en la A2 a terminar en la carpeta en B2. Necesito la carpeta en A3 para acabar en la carpeta en B3, etc...

Brians-MacBook-Pro:Data Migration briangannuscio$ Head OrderFileV2.csv
/Volumes/Backup Plus/Salesforce/Order Test/OR-1000050081,/Volumes/Backup Plus/Salesforce/Opportunity Test/Q-RGORD20170207-1526

Brians-MacBook-Pro:Data Migration briangannuscio$ File OrderFileV2.csv
OrderFileV2.csv: ASCII text, with CR line terminators

2voto

Steve Evans Puntos 155

Hay muchas maneras de abordar esta tarea. A continuación es un método que utiliza el Ir idioma. Espero que los demás pronto estará junto con herramientas alternativas y lenguajes.

Si esto es una tarea de tiempo, esperar a pasar el tiempo que los guíen el proceso.

Si este va a ser un habitual tarea automatizada, pasar tiempo ahora para obtener la secuencia de comandos de la herramienta o de derecho.

Cosas a tener en cuenta:

  • Apreciar que el csv formato de archivo no está completamente estandarizado.
  • Saber que Excel tiene una reputación con la csv formato.
  • Cualquier nombre de archivo o carpeta contener un presupuesto, espacio o coma?
  • ¿Qué pasa si las carpetas están en la lista pero faltan en el disco?
  • ¿Qué pasa si una carpeta para mover aparece dos veces?
  • ¿Qué pasa si una carpeta para mover ya existe en el destino?

Copias de seguridad de sus datos antes de ejecutar cualquier respuestas.

csv-mover

El csv-move herramienta requiere de UNIX/LF los finales de línea. La conversión de los finales de línea es un problema resuelto en otros lugares.

Listo para usar los binarios de csv-move están disponibles en la última versión. A continuación es un extracto del código:

// Read from stdin - expects LF line endings
r := csv.NewReader(os.Stdin)
r.FieldsPerRecord = 2

for {
    line, err := r.Read()
    // ...

    // Perform the command
    cmd := exec.Command(mvPath, "-vn", line[0], line[1])
    if err := cmd.Run(); err != nil {
        log.Fatalf("move failed: %s", err.Error())
    }
}

Prueba de su archivo CSV puede ser analizado como dos entradas por línea:

./csv-move < input.csv

Una vez probado, y usted está satisfecho con el impreso de comandos de movimiento, realizar el movimiento:

./csv-move -move < input.csv

1voto

A nivel de shell

 while IFS=\, read -t $'\r' s t; do
    echo mv -n "$s" "$t/"
done < orderfile.csv
 

Elimine echo una vez que esté seguro de que el resultado se ve bien.

Como una pequeña protección contra errores, recomendaría limitar un CSV a aproximadamente 1000 líneas.

1voto

Michael Zhou Puntos 167

Usted debe esperar que cualquier archivo csv deben ser desinfectados antes de su uso en el entorno de la shell. Como mínimo, el encabezado, si es que existe, debe ser eliminado, todas las líneas de los caracteres de terminación será necesario convertir a LF (el carácter de avance de línea), y la última línea del archivo csv deben ser terminada.

El file comando muestra de que su archivo csv tiene CR (retorno de carro) terminado líneas. Así, el uso de simples comandos disponibles, usted puede convertir los caracteres CR a LF personajes con tr de tubo, a continuación, los resultados a sed a quitar el encabezado y terminar la última línea, la creación de un nuevo archivo desinfectado.

tr '\r' '\n' < OrderFileV2.csv | sed '1d;a\' >sanitizedOrderFileV2.csv

El nuevo archivo debe ser verificado para las filas contiguas. Los campos vacíos y líneas debe ser eliminado. Ahora debe tener un archivo que se puede alimentar a un while read de bucle.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X