Cambiar el nombre de la carpeta usando script, variables del documento de Excel

Cambiar el nombre de la carpeta usando script, variables del documento de Excel

Sistema de archivos Linux

Tengo un directorio con 1500 carpetas. Estoy buscando usar un documento de Excel que tenga 1500 nombres de carpetas en una columna y una identificación única en la siguiente. Estoy buscando crear un script para que el script cambie el nombre de las carpetas a la nueva identificación única. ¿Alguien puede ayudarme? Parece muy fácil aunque no sé escribir guiones. ¿Alguien puede proporcionar un enlace a un script en línea (no he podido encontrar ninguno)?

Look at volume A for folder Var#1 (from excel)

if present on Volume A then mv Var#1 to Var#2 (from excel)

loop and grab next line of excel doc

Respuesta1

Bien, aquí está:

para i en $(cat test.csv)

hacer

dir1=$(echo $i|sed 's/,.*//')

dir2=$(echo $i|sed 's/.*,//')

si [-d $dir1]

entonces

si [ -d $dir2 ]

entonces

echo $dir2 presente, omitiendo el movimiento de $dir1 a $dir2

demás

mv $dir1 $dir2

fi

fi

hecho

Respuesta2

Entonces, soy un usuario de Linux, Unix y Mac y escribo scripts en Perl y Bash. Si tiene un Power Shell o Cygwin, puede hacer lo siguiente, es posible que Windows también tenga esto, pero no contenga la respiración:

Sin hacer todo, creo que deberías poder tomar esto y modificarlo como quieras...

  • Guarde sus datos en un archivo csv (somefile.csv)
  • En un shell bash

bash> para temp_line encat somefile.csv

hacer

echo mv $temp_line |sed 's/,/ /'

hecho > algún archivo.sh

¡No ejecute la siguiente línea hasta que esté seguro de que hará lo que desea que haga!

fiesta>. ./algunarchivo.sh

Eso debería ser todo... Nota, este es un truco rápido, esto se puede escribir con más verificación de errores y todo eso, y esto se me pasó por la cabeza :) Otro problema con el que te puedes encontrar son los espacios en el archivo/ nombres de directorios, solo agregue comillas. Si necesita verificar si el directorio está presente, puede agregar una declaración if como la siguiente:

bash>if [ -d 'dir_name' ]; entonces... ;fi

Eso debería ser suficiente información sin necesidad de escribirlo. Quizás me inspire más tarde y escriba esto en una publicación de seguimiento.

Respuesta3

Esto esno es una respuesta, pero lo ingreso como tal porque los comentarios no permiten un formato decente o tanto texto.

Obviamente, los nombres de las carpetas existentes son únicos (suponiendo que estén todas en la misma supercarpeta o que se presenten como nombres de ruta completos, como lo señaló @nerdwaller). Y los ID únicos de la segunda columna son, por definición, únicos. ¿Las dos columnas son únicas (no se superponen)? Considere los siguientes datos:

          Nombre antiguo Nuevo ID único
Ser_o_no_ser, 1
Esa es la pregunta. 2
El_zorro_brown_quick 3
salta_sobre_el_perro_perezoso. 4
             ⋮ ⋮
Érase_una_medianoche_lúgubre, 40
mientras_yo_meditaba, 41
débil_y_cansado, 42
             ⋮ ⋮
La_respuesta_al_56
última_pregunta_de_vida, 57
el_universo,_y_todo_es 58
42 59
Y así sucesivamente... 60

Si intenta cambiar el nombre weak_and_weary,a 42, colisionará con la 42carpeta existente. Probablemente la mejor manera de solucionar este problema es verificar los nombres de las carpetas antiguas en busca de nombres que coincidan con el patrón de las ID únicas y manejarlos manualmente.

información relacionada