サーバーAからサーバーBにファイルをコピーする

サーバーAからサーバーBにファイルをコピーする

サーバーAからサーバーBにファイルをコピーし、コピーしたファイルをサーバーAからアーカイブフォルダーに移動する必要があります。

スクリプトを作成しましたが、別のディレクトリ名を使用します。サーバーAからサーバーBにファイルをコピーすることは機能しますが、ファイルをアーカイブフォルダに移動できません。

スクリプト

#!/usr/bin/env bash

username="tempusr"
dir_origin="/data"
dir_destination="/export/home/tempusr/data"
Ip="123.456.789"

echo $dir_origin

echo "Uploading files to remote server...."
dt=$(date +%Y%m%d%H%M%S)
for file in /data/*.xml
do
    name=${file%.*}
    echo "Name is: "${name}
    echo "File is: "/data/$file
    echo "Coping files from Server A to Server B"
    scp -rC $file $username@$Ip:$dir_destination
    echo "New File is: " /data/processed/${name}_${dt}.xml
    echo "Moving files from Server A /data to /data/processed and appending timestamp before file type"
    mv $file /data/processed/${name}_${dt}.xml
done
echo "File upload to remote server completed! ;)"

私が得る出力は次のとおりです。問題:行を確認すると、ファイルは次のようになります。そのパスは "/data//data/" ですが、パスは /data/ でなければなりません。私はどこで間違っているのか理解できません。

./transfer.sh
/data
Uploading files to remote server....
Name is: /data/1552653_123510007_1316325
File is: /data//data/1552653_123510007_1316325.xml
SERVERB password:
1552653_123510007_1316325.xml 100% 2204 1.6MB/s 00:00
New File is: /data/processed//data/1552653_123510007_1316325_20230914002942.xml
mv: cannot move '/data/1552653_123510007_1316325.xml' to '/data/processed//data/1552653_123510007_1316325_20230914002942.xml': No such file or directory.

さらに、毎回パスワードを要求し、このシステムでsshpass実行されますapt install sshpass。したがって、scpコマンドに直接パスワードを渡したり、毎回パスワードを入力する必要がないようにする他の方法はありますか?

ベストアンサー1

改行:

    mv $file /data/processed/${name}_${dt}.xml

そして

    mv "$file" /data/processed/"${name##*/}_${dt}.xml"

##*/変数名のパス(最後のスラッシュまでを含む)が削除されます。変数を二重引用符で囲むと、スペースやその他のシェル区切り文字を含むファイル名は引き続き正しく処理されます。

他の質問については、コメントで述べたように、秘密鍵のパスワードなしでSSH公開鍵認証を設定してください。

おすすめ記事