用于生成命令的脚本,将工作站从一个 zman 文件夹移动到另一个

用于生成命令的脚本,将工作站从一个 zman 文件夹移动到另一个

我在服务器上运行一个命令,列出文件夹中的工作站。

根据工作站名称的前 3 个字符,我想将工作站从当前文件夹移动到新文件夹。

因此命令:zman wl /Workstation/Build将列出 Build 文件夹中的工作站,如下所示。

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

现在我有一个定义文件,它告诉我根据工作站名称的前 3 个字符将工作站移动到哪里。

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

例如,您可以使用 oneliner 来做到这一点,如下所示:

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

相关内容