shell 脚本无法正确检测文件名

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

我的文件名为:/home/cti/10min_test/CTI_poult_20240902005000.csv

并在下面编写了这个 shell 脚本:

CURRENT_TIME=$(date -d "+1 hour +50 minutes" +%Y%m%d%H%M)
CURRENT_TIME_TRIMMED=${CURRENT_TIME:0:11}
FILE_NAME_PART=${CURRENT_TIME_TRIMMED}
echo "FILE_NAME_PART: ${FILE_NAME_PART}"
echo "SOAP PROJECT: Starting SFTP…"
lftp -d -u myuser,mypass sftp://myip:port <<EOF
mput /home/cti/10min_test/CTI_poult_${FILE_NAME_PART}*.csv
bye
EOF
echo "done"

当执行此操作时,仅显示此消息:

FILE_NAME_PART: 20240902011
SOAP PROJECT: Starting SFTP…
*.csv: no files found_test/CTI_poult_20240902011
done

脚本似乎未正确处理“*.csv”。 谁能告诉我到底出了什么问题?

shell filenames
1个回答
0
投票

脚本似乎未正确处理“*.csv”。谁能告诉我到底出了什么问题?

为什么脚本无法正确处理“*.csv”,可能是lftp命令中使用

wildcards (*)
无法自动扩展。

mput /home/cti/10min_test/CTI_poult_${FILE_NAME_PART}*.csv

在将文件传递到 lftp 之前,您可以尝试在 shell 中扩展通配符。

#!/bin/bash

CURRENT_TIME=$(date -d "+1 hour +50 minutes" +%Y%m%d%H%M)
CURRENT_TIME_TRIMMED=${CURRENT_TIME:0:11}
FILE_NAME_PART=${CURRENT_TIME_TRIMMED}

echo "FILE_NAME_PART: ${FILE_NAME_PART}"
echo "SOAP PROJECT: Starting SFTP…"

# Expand the file path before passing it to lftp
FILES_TO_UPLOAD=$(ls /home/cti/10min_test/CTI_poult_${FILE_NAME_PART}*.csv 2>/dev/null)

if [ -z "$FILES_TO_UPLOAD" ]; then
  echo "No files found for pattern: /home/cti/10min_test/CTI_poult_${FILE_NAME_PART}*.csv"
else
  lftp -d -u myuser,mypass sftp://myip:port <<EOF
  mput ${FILES_TO_UPLOAD}
  bye
EOF
fi

echo "done"
© www.soinside.com 2019 - 2024. All rights reserved.