リモートサーバーへのファイルのアップロードとバッチの名前変更

リモートサーバーへのファイルのアップロードとバッチの名前変更

ファイルが多すぎるため、特定のターゲットを持つリモートコンピュータにアップロードする必要があります。次の地図があります(再構成可能)。

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

2つの解決策を考えることができます。

特定のターゲットにアップロード

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接続を持つことは効率的ではありません。

質問:(速度のために)1つの接続で複数のファイルをアップロードするために同様の方法をどのように使用できますかscp

rsyncを使用してアップロードしてから一括名前を変更する

を使用してフォルダ全体を一時rsyncフォルダにアップロードできます。これは非常に高速です。次に、上記の画像に従ってファイルの名前を変更します。

質問:指定されたマップを使用して一括名前を変更するには?

ベストアンサー1

3番目のソリューションでは、すべてのソースファイルが同じファイルシステムに存在する必要があるため、すべてのファイルをランダムにハードリンクできます。

ファイルマッピングをファイルに保存します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

おすすめ記事