记录 SCP 传输会截断文件名

问题描述 投票:0回答:1

您好,当我运行一个将数据从远程服务器传输到本地服务器的脚本时,我捕获了 scp 输出。当我 vim 文件时,我看到文件名已被截断 为什么会这样?

bondrcpt_CEP_900_2303_2019_M04_BOND_REC_20181 0% 0 0.0KB/秒 --:-- ETAbondrcpt_CEP_900_2303_2019_M04_BOND_REC_20181 100% 84 1.6KB/秒 00:00 bondrfnd_CEP_900_2303_2019_M06_BOND_REC_20181 0% 0 0.0KB/秒 --:-- ETAbondrfnd_CEP_900_2303_2019_M06_BOND_REC_20181 100% 1372 60.7KB/秒 00:00 bondrcpt_CEP_900_2303_2019_M04_BOND_REC_20181 0% 0 0.0KB/秒 --:-- ETAbondrcpt_CEP_900_2303_2019_M04_BOND_REC_20181 100% 84 3.8KB/秒 00:00

正确的文件名是 bondrcpt_CEP_900_2303_2019_M04_BOND_REC_20181005_20230816_180040.TXT bondrfnd_CEP_900_2303_2019_M06_BOND_REC_20181231_20230814_180541.TXT

bash脚本中的代码如下 它遍历数组并 scp 所需的文件

for FILE in "${FILEMASKS[@]}"; do
      script -q -c "scp ${USER}@${SERVER}:${SOURCE}/${FILE}* ${DEST}" >> ${TRX_LOG}
     #need to REMOVE ^M from the log
     sed -i -e 's/\r//g' ${TRX_LOG}
done
scp truncate
1个回答
0
投票

scp
实用程序供用户交互使用。您所讨论的
scp
输出被称为“进度表”,并且 scp 将其格式化以适合终端的一行。运行时,scp 获取终端的字符宽度(如果无法获取宽度,则使用值 80)。它为文件大小、传输量和传输的运行时间保留 36 个字符。该行的其余部分用于文件名。如果文件名太长而无法容纳空格,则会被截断。

您的示例文件名长度为 67 和 68 个字符。看来 scp 需要一个 104 个字符或更宽的终端来显示文件名而不截断它们。

如果您在终端窗口中运行此脚本,您可以尝试使终端窗口更宽。或者,您可以尝试在脚本中将终端宽度设置为更宽的值:

script -q -c "stty cols 150; scp ${USER}@${SERVER}:${SOURCE}/${FILE}* ...

如果命令不在 TTY 中运行,这可能不起作用(并且会产生错误)。

© www.soinside.com 2019 - 2024. All rights reserved.