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 en
cat 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 42
carpeta 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.