您好,当我运行一个将数据从远程服务器传输到本地服务器的脚本时,我捕获了 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
实用程序供用户交互使用。您所讨论的 scp
输出被称为“进度表”,并且 scp 将其格式化以适合终端的一行。运行时,scp 获取终端的字符宽度(如果无法获取宽度,则使用值 80)。它为文件大小、传输量和传输的运行时间保留 36 个字符。该行的其余部分用于文件名。如果文件名太长而无法容纳空格,则会被截断。
您的示例文件名长度为 67 和 68 个字符。看来 scp 需要一个 104 个字符或更宽的终端来显示文件名而不截断它们。
如果您在终端窗口中运行此脚本,您可以尝试使终端窗口更宽。或者,您可以尝试在脚本中将终端宽度设置为更宽的值:
script -q -c "stty cols 150; scp ${USER}@${SERVER}:${SOURCE}/${FILE}* ...
如果命令不在 TTY 中运行,这可能不起作用(并且会产生错误)。