我在服务器上运行一个命令,列出文件夹中的工作站。
根据工作站名称的前 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