如何检查文件是否存在于远程服务器上

如何检查文件是否存在于远程服务器上

我需要在 Linux 远程服务器上检查文件是否存在于文件夹中,并根据结果执行某些操作。

我的脚本就是这样的。

 #/bin/bash

HOST=upload@IP
DIR=/var/www/Upload/MC/mxf/
FILE='20200821-012*'

find "$DIR" -maxdepth 1 -name "$FILE"

if [[ $(ssh "$HOST" find "$DIR" -maxdepth 1 -name "$FILE" ) != "" ... ]];

then

   echo "The file exists"

else

  echo "The file doesn't exist."

fi

当我运行脚本时出现此错误

    user@svv-at001:~# sh -x /scripts/ch.sh 
+ HOST=upload@IP
+ DIR=/var/www/Upload/MC/mxf/
+ FILE=20200821-012*
+ find /var/www/Upload/MC/mxf/ -maxdepth 1 -name 20200821-012*
find: ‘/var/www/Upload/MC/mxf/’: No such file or directory
+ ssh upload@IP find /var/www/Upload/MC/mxf/ -maxdepth 1 -name 20200821-012*
+ [[ /var/www/Upload/MC/mxf/20200821-012_007.mxf /var/www/Upload/MC/mxf/20200821-012_012.mxf /var/www/Upload/MC/mxf/20200821-012_010.mxf /var/www/Upload/MC/mxf/20200821-012_001.mxf /var/www/Upload/MC/mxf/20200821-012_005.mxf /var/www/Upload/MC/mxf/20200821-012_008.mxf  !=  ... ]]
/scripts/ch.sh: 13: /scripts/ch.sh: [[: not found
+ echo The file doesn't exist.
The file doesn't exist.

任何建议都将受到赞赏。

非常感谢

答案1

使用单引号设置变量以避免在本地计算机中扩展通配符,

FILE='20200819-001-*'

该命令find可以管理通配符,因此我建议使用以下命令代替简单测试,

find "$DIR" -maxdepth 1 -name "$FILE"

或者如果你想在不限制搜索深度的情况下检查子目录,

find "$DIR" -name "$FILE"

因此,在你的 shellscript 中,你要检查find命令行是否产生一些输出,

if [[ $(ssh "$HOST" find "$DIR" -maxdepth 1 -name "$FILE" ) != "" ]]

答案2

这很简单

if [[ "`ssh -q hostname ls /dir/filename.abc 2>dev/null`" == "/dir/filename.abc" ]]
then
echo "file exists"
else
echo "file not exists"
fi

相关内容