Ejecuto un comando en el servidor que enumera las estaciones de trabajo en una carpeta.
Según los primeros 3 caracteres del nombre de la estación de trabajo, quiero mover la estación de trabajo de la carpeta actual a una carpeta nueva.
entonces el comando: zman wl /Workstation/Build
enumeraría las estaciones de trabajo en la carpeta Build de la siguiente manera.
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Ahora tengo un archivo de definiciones que me dice dónde mover la estación de trabajo según los primeros 3 caracteres del nombre de la estación de trabajo.
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
Así que estoy buscando un script o comando que enumere la estación de trabajo en la carpeta "de" y luego busque los primeros 3 caracteres del nombre de la estación de trabajo en el archivo de definiciones para obtener la carpeta "a" y mover la estación de trabajo allí.
El comando de movimiento sería.
zman wmv /Workstation/Build/Red-001 /Workstation/Staff/Red
Respuesta1
Puedes hacerlo, por ejemplo, con un oneliner como este:
while read -r WORKSTATION; do echo "$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)"; done < from_file
Su salida sería:
/Workstation/Build/red-001 /Workstation/Staff/Red
/Workstation/Build/sci-001 /Workstation/Staff/Sci
/Workstation/Build/shs-001 /Workstation/Staff/Shs
WORKSTATION
es solo un nombre para la variable que contendrá cadaruta de la estación de trabajopara cada iteración del ciclo while. TO_FILE_PATH
es la ruta de este archivo:
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
y from_file
, es un archivo que contiene esto:
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
O puede utilizar un script bash, move_worksations.sh
como este:
FROM_FILE_PATH="$1"
TO_FILE_PATH="$2"
WORKSTATION_NUMBER=0
while read -r WORKSTATION
do
WORKSTATIONS["$WORKSTATION_NUMBER"]=""$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)""
((WORKSTATION_NUMBER++))
done < "$FROM_FILE_PATH"
for WS_SOURCE_TARGET in "${WORKSTATIONS[@]}"
do zman wmv "$WS_SOURCE_TARGET"
done
Y luego, usas move_worksations.sh
, de esta manera:
./move_worksations.sh from_file to_file
Nota: recuerda dar move_worksations.sh
permiso de ejecución:chmod u+x move_worksations.sh