원격 서버에 파일 업로드 및 일괄 이름 바꾸기

원격 서버에 파일 업로드 및 일괄 이름 바꾸기

파일이 너무 많아서 특정 대상이 있는 원격 컴퓨터에 업로드해야 합니다. 다음과 같은 지도가 있습니다(재구성 가능).

1/1/1/file.jpg -> 2/3/4/image1.jpg
2/12/2/file.jpg -> 5/6/7/image2.jpg
3/31/31/file.jpg -> 8/9/1/image3.jpg

두 가지 해결책을 생각해 볼 수 있습니다.

특정 대상에 업로드

scp /folder/1/1/1/file.jpg user@ip:/dir/2/3/4/image1.jpg
scp /folder/2/12/2/file.jpg user@ip:/dir/5/6/7/image2.jpg
scp /folder/3/31/31/file.jpg user@ip:/dir/8/9/1/image2.jpg

그러나 수천 개의 scp연결을 갖는 것은 효율적이지 않습니다.

질문:(속도를 위해) 하나의 연결로 여러 파일을 업로드하기 위해 유사한 방법을 어떻게 사용할 수 있습니까 scp?

rsync를 사용하여 업로드한 다음 일괄 이름 바꾸기

를 사용하여 전체 폴더를 rsync임시 폴더에 업로드할 수 있는데, 이는 매우 빠릅니다. 그런 다음 위 이미지에 따라 파일 이름을 바꿉니다.

질문:주어진 지도를 사용하여 일괄 이름을 바꾸는 방법은 무엇입니까?

답변1

세 번째 솔루션에서는 모든 소스 파일이 동일한 파일 시스템에 있어야 하므로 모든 파일을 임의로 하드 링크할 수 있습니다.

파일 매핑을 file 에 저장합니다 filemap.txt.

$ cat << EOF > filemap.txt
1/1/1/file.jpg -> 2/3/4/image1.jpg
2/12/2/file.jpg -> 5/6/7/image2.jpg
3/31/31/file.jpg -> 8/9/1/image3.jpg
EOF

temp그런 다음 이 스크립트는 파일 맵의 대상 경로와 일치하는 하위 디렉터리를 포함하는 임시 출력 디렉터리를 만드는 데 사용됩니다 . 각 소스 파일 이름은 디렉토리 아래의 올바른 대상 경로에 하드 링크됩니다 temp. 완전히 채워지면 로컬 컴퓨터에서 편집된 다음 삭제 temp됩니다 .rsyncuser:ip

#!/usr/bin/env bash

srcD="/folder/"
destD="/dir/"

rm   -rf temp

while read  src X dest
do

        dir="$(dirname "$dest")"

        mkdir -p "temp/$dir"
        ln "$srcD$src" "temp/$dest"

done < filemap.txt

rsync -av temp/ user@ip:"$destD"

rm -rf temp

관련 정보