![scp 带密码并重命名文件](https://linux22.com/image/56236/scp%20%E5%B8%A6%E5%AF%86%E7%A0%81%E5%B9%B6%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)
我需要执行 scp 命令并重命名文件。
我尝试过以下代码:
HOST=lnx25
USERNAME=ngqa
PASSWORD=xxxxx
FILE=$1
FILE_NAME=`echo $FILE | awk 'BEGIN{FS="/"} {print $NF;}'`
todayDateVar=`date | awk 'BEGIN{FS=" ";OFS="_"} {print $2,$3,$6;}'`
REPORT_HOME="/dnbusr1/ngqa/scp_script/new/"
DES_PATH="/ngdata/nc_donotdelete/test_out_files/$FILE_NAME.$todayDateVar"
scp $FILE $USERNAME:"$PASSWORD"@$HOST:sys_config $DES_PATH
结果:(使用./scp.shsample.obj运行)
/ngdata/nc_donotdelete/test_out_files/sample.obj.Sep_23_2014: No such file or directory
我猜这个错误表明该名称中没有可用的目录。但每当我尝试不重命名文件就意味着它工作正常。以下代码无需重命名文件即可正常工作。
DES_PATH="/ngdata/nc_donotdelete/test_out_files"
它将文件名复制为sample.obj 到目标目录。但我需要复制文件并重命名。
答案1
如果DES_PATH="/ngdata/nc_donotdelete/test_out_files/$FILE_NAME.$todayDateVar"
不起作用,而DES_PATH="/ngdata/nc_donotdelete/test_out_files"
起作用,则意味着/ngdata/nc_donotdelete/test_out_files
不存在,并且您的文件被保存为/ngdata/nc_donotdelete/test_out_files
而不是/ngdata/nc_donotdelete/test_out_files/$1
(因为目标路径可以是任何一个目录或文件名,并且scp
仅当该路径存在并且已经是目录或目录链接时才会将其视为目录)您可以在目标路径末尾添加斜杠以确保它始终被视为目录目录而不是文件。
答案2
文件中的纯密码不是一个好主意。除了在我的盒子上我别无选择-p passwd
。
由于您可以访问远程主机,因此您应该使用以下命令生成密钥(私有和公共)
ssh-keygen
(全部接受默认,不使用密码)
每个用户都应该执行此步骤
然后,有一次
ssh-copy-id ngqa@lnx25
应对每个用户和每个主机执行此步骤。
那么在你的 shell 中,最后一行应该是
scp $FILE $USERNAME@$HOST:$DEST_PATH