サーバー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公開鍵認証を設定してください。