Eu executo um comando no servidor que lista as estações de trabalho em uma pasta.
com base nos três primeiros caracteres do nome da estação de trabalho, desejo mover a estação de trabalho da pasta atual para uma nova pasta.
então o comando: zman wl /Workstation/Build
listaria as estações de trabalho na pasta Build da seguinte maneira.
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Agora eu tenho um arquivo de definições que me diz para onde mover a estação de trabalho com base nos primeiros três caracteres do nome da estação de trabalho.
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
Então, estou procurando um script ou comando que liste a estação de trabalho na pasta "de" e, em seguida, procure os três primeiros caracteres do nome da estação de trabalho no arquivo de definições para obter a pasta "para" e mover a estação de trabalho para lá.
O comando de movimento seria.
zman wmv /Workstation/Build/Red-001 /Workstation/Staff/Red
Responder1
Você pode fazer isso, por exemplo, com um 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
Sua saída seria:
/Workstation/Build/red-001 /Workstation/Staff/Red
/Workstation/Build/sci-001 /Workstation/Staff/Sci
/Workstation/Build/shs-001 /Workstation/Staff/Shs
WORKSTATION
é apenas um nome para a variável que conterá cadacaminho da estação de trabalhopara cada iteração do loop while. TO_FILE_PATH
é o caminho deste arquivo:
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
e from_file
, é um arquivo que contém isto:
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Ou você pode usar um 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
E então, você usa move_worksations.sh
, desta forma:
./move_worksations.sh from_file to_file
Nota: lembre-se de dar move_worksations.sh
permissão de execução:chmod u+x move_worksations.sh