저는 그래픽 회사에서 일하고 있으며 고객이 엄청난 양의 데이터를 제출합니다. 단일 프로젝트 폴더는 서버에서 수백 기가 바이트의 공간을 차지할 수 있습니다. 직접 연결된 RAID의 공간은 10TB로 제한되어 있지만 iSCSI를 통해 메인 서버에 연결된 96TB 스토리지 서버가 있습니다.find 명령을 사용한 Rsync, 원본 삭제, 심볼 링크로 원본 바꾸기
나는이 과정을 자동화 할 수 BASH 스크립트에 충분히 익숙하지만 내가 수동으로 할 것은이 명령을 찾아내는 수행하지 해요 :
find /disk -type d -name 09\ Client-Files | sed 's/ /\\ /g' > client-origs.txt
나는 "09 클라이언트 파일"rsync는이 목록에서 디렉토리를 사용하여 스토리지 서버에 연결하십시오 :
rsync -avR /disk/Client-Jobs/1234\ Client/09\ Client-Files /iscsi
-R 옵션을 사용하면/iscsi에 대한 상대 경로가 복사됩니다.
원래의 "09 Client-Files"디렉토리가 삭제되고 심볼릭 링크가/iscsi 볼륨의 새 위치를 가리 킵니다.
내가 뭘 쏘고있는 것은 모든 것을 한 번에 할 수있는 변수로 발견 된 경로를 사용하는 것입니다. 계속 진행하는 방법에 대한 손실이 있습니다. 지금 당장 bash 변수에 대해 배워 보려고 노력했습니다. 더 간단한 작업을 할 수는 있지만이 경우에는 비어 있습니다. 형제를 도울 수 있습니까?
RedComet 제안에 감사드립니다. 귀하의 게시물은 매우 도움이되었습니다. 루프에'rm -r $ i;'와'ln -s/iscsi/$ i $ i;'를 추가했습니다. 디렉토리는 공백을 포함하고 스크립트는 인수를 구문 분석하지 않습니다. 공백을 피하기 위해 sed에 변수를 파이프하더라도. 테스트 디렉토리에 공백이 없으면 제대로 작동합니다. 아이디어? –
@Flex Branningan : 귀하의 의견을 회신하도록 편집했습니다. – RedComet
이 작업은 가능하지만 find 명령에 세 번째 옵션을 추가하여 원래 상위 디렉토리로 심볼릭 링크하면 첫 번째 옵션을 수행하지만 후속 옵션은 수행하지 않습니다. 'find/disk -type d -name "09 클라이언트"-exec rsync -avR {}/iscsi \; -exec rm -r {} \; -exec ln -s/iscsi {} {} \; –