我在伺服器上運行一個命令,列出資料夾中的工作站。
根據工作站名稱的前 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