使用 bash 检查某些远程文件夹中是否存在文件

使用 bash 检查某些远程文件夹中是否存在文件

我需要编写一个脚本来查看某些文件夹,并在这些文件夹中有文件时发送电子邮件。
我尝试过执行类似的操作,但是命令变量和文件夹打印出现错误。

for folder in "FOLDER1" "FOLDER2";  do
  command=`ssh -q user@host "ls /usr/local/username/`{print $folder}` | wc -l"`
  #echo $command

  if [ $command -ne '0' ]
  then
    #send error email 
  fi
done

答案1

你应该尝试:

command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')

你不能真正嵌套反引号(而且我不确定你为什么要这样做)。

答案2

这可以简单很多。我不知道你要做什么{print $folder}:大括号在这里没有任何意义,如果你试图包含$folder在字符串中,你只需写$folder.你不应该解析的输出ls,它很少有用并且经常失败。

if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
  # the file doesn't exist

请注意,远程 shell 必须用引号引起来的文件名。我在上面的命令中主要通过用单引号将远程命令中的文件名引起来来解决这个问题,但这仅在$folder其本身不包含任何单引号的情况下才有效。如果您的本地 shell 是 bash、ksh93 或 zsh,请改用它来引用任何单引号:

q=\'\\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then

另一种通常更方便的方法是使用以下命令挂载远程文件系统sshfs并通过正常的文件系统接口对其进行处理。我建议这样做,除非您同时使用许多远程服务器。

mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then

相关内容