我需要在 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