仅当使用 SFTP 将文件从远程服务器复制到我的服务器时,我才需要使用 if 函数来过滤掉所需的文件。这是我尝试获取里面的所有数据/filesnew
。
#!/bin/bash
files=`sshpass -p 'XXX' sftp -P 2222 [email protected]<<EOF
cd /filesnew
ls
EOF`
files=`echo $files|sed "s/.*sftp> ls//"`
(
echo cd /filesnew
for file in $files; do
echo get $file /data/processedfiles/$file
done
) |sshpass -p 'XXX' sftp -P 2222 [email protected]
我需要过滤掉以"USER"
.
ex:
If($files==*USER*) then
echo get $file /data/processedfiles/$file
有人可以告诉我该怎么做吗?
答案1
用于sftp
获取与模式匹配的所有文件(以目录中的/filesnew/USER*
文字字符串开头的文件名)并将它们本地存储在目录中:USER
/filesnew
/data/processedfiles
mkdir -p /data/processedfiles || exit
sftp -P 2222 [email protected] <<'END_SFTP'
get /filesnew/USER* /data/processedfiles
END_SFTP
请注意,没有理由列出这些文件。您也不必提及本地主机上的目标文件名,只需提及目标目录,并且仅当它与当前目录不同时才提及。
mkdir
如果您确信本地目标目录始终存在,则可以跳过初始命令。
作为补充说明,可能值得一提的是,它if
是“保留字”,是“语句if
”的一部分,而不是 shell 中的函数。