скрипт для генерации команд для перемещения рабочей станции из одной папки zman в другую

скрипт для генерации команд для перемещения рабочей станции из одной папки zman в другую

Я запускаю на сервере команду, которая выводит список рабочих станций в папке.

На основе первых трех символов имени рабочей станции я хочу переместить рабочую станцию ​​из текущей папки в новую папку.

поэтому команда: zman wl /Workstation/Buildвыведет список рабочих станций в папке Build следующим образом.

/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001

Теперь у меня есть файл определений, который сообщает мне, куда переместить рабочую станцию, на основе первых трех символов имени рабочей станции.

red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs

Поэтому я ищу скрипт или команду, которые перечисляли бы рабочие станции в папке «from», а затем искали бы первые 3 символа имени рабочей станции в файле определений, чтобы получить папку «to» и переместить туда рабочую станцию.

Команда перемещения будет такой.

zman wmv /Workstation/Build/Red-001 /Workstation/Staff/Red

решение1

Это можно сделать, например, с помощью однострочника, например, такого:

while read -r WORKSTATION; do echo "$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)"; done < from_file

Его вывод будет следующим:

/Workstation/Build/red-001 /Workstation/Staff/Red
/Workstation/Build/sci-001 /Workstation/Staff/Sci
/Workstation/Build/shs-001 /Workstation/Staff/Shs

WORKSTATIONэто просто имя переменной, которая будет содержать каждыйпуть к рабочей станциидля каждой итерации цикла while. TO_FILE_PATH— это путь к этому файлу:

red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs

и from_file, — это файл, содержащий следующее:

/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001

Или вы можете использовать скрипт bash, move_worksations.shнапример, такой:

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

И затем вы используете move_worksations.sh, таким образом:

./move_worksations.sh from_file to_file

Примечание: не забудьте дать move_worksations.shразрешение на выполнение:chmod u+x move_worksations.sh

Связанный контент