Я запускаю на сервере команду, которая выводит список рабочих станций в папке.
На основе первых трех символов имени рабочей станции я хочу переместить рабочую станцию из текущей папки в новую папку.
поэтому команда: 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