큰 디렉토리 트리를 처리하기 위해 bash 스크립트를 작성하고 여러 스트림에서 rsync를 작성하려고합니다. 이 사이트에 대한 다른 연구에서 다음과 같이 구성했습니다. 가정은 명령이 실행된다병렬 옵션을 사용할 때 xargs에 여러 하위 명령을 전달하는 방법
program.sh/입/위치/출력/위치 $ 스레드
내 스크립트의 핵심 라인은 위의 생각이다
cd $1; find . -depth \(-type d -printf \""%p/\"\n" \) | xargs -n1 -P$3 -I% rsync -lptgoDds --delete --backup --backup-dir=$INCREMENTALS/$DATE/$1 % $2/%
입니다 특정 지점의 모든 디렉토리를 찾은 다음 rsync 명령의 병렬 인스턴스에 전달하여 $ 1에서 $ 2로 데이터를 복사하십시오.
rsync 문제는 입력 구문 분석 방법에 따라 아직 존재하지 않는 중첩 폴더를 만들어야 할 수 있습니다. (적어도 나는 그것이 내가보고있는 오류의 원인이라고 생각한다). 이 문제를 해결하기 위해 rsync에서 두 개의 명령을 실행할 수 있다고 생각했습니다. 첫 번째 명령은 디렉토리를 만들고 두 번째 명령은 rsync를 시작합니다. 이 같은
뭔가 :
cd $1; find . -depth \(-type d -printf \""%p/\"\n" \) | xargs -n1 -P$3 -I% 'mkdir -p %;rsync -lptgoDdsv --delete % $2/%;'
하지만 그 중 하나가 작동하지 않는 것 같습니다.
지금 이걸 갖고 놀았으니 도움을 청합니다. :-)
정확히 어떤 방식으로 작동하지 않습니까? 오류가 있습니까? –
'-exec' 옵션을'xargs' 대신에'find'와 함께 사용하는 것이 더 낫습니다. –
예 하위 디렉터리가 상위 디렉터리보다 먼저 처리되기 때문에 "디렉터리를 찾을 수 없습니다"오류가 발생했습니다. 나는 그러나 발견에서 깊이 벗어났다. 그리고 그것은 그것을 고쳤을지도 모른다. -P 함수를 사용하여 xargs를 병렬 처리하기 때문에 -exec를 사용하고 싶지 않습니다. –