폴더의 워크스테이션을 나열하는 명령을 서버에서 실행하고 있습니다.
워크스테이션 이름의 처음 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
move_worksations.sh
또는 다음과 같이 bash 스크립트를 사용할 수 있습니다 .
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