用於產生命令的腳本,將工作站從一個 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

相關內容