如何检查:函数的变量是否是远程服务器上文件夹或文件的路径?

如何检查:函数的变量是否是远程服务器上文件夹或文件的路径?

我需要使用rsyncscp将文件或文件夹从远程服务器复制到计算机。

要复制(同步)文件夹,我使用以下功能:

foldertocomp() {
   rsync -avz [email protected]:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1"
}

我可以使用以下函数来复制文件:

filetocomp() {
   rsync -avz [email protected]:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/"
}

或者

filetocomp() {
   scp [email protected]:"'/home/pi/Torrents/$1'" /home/comp/Torrent
}

所有这些功能都运行良好。但我需要将这些功能组合成一个功能。像这样:

tocomp() {
   Some code...
}

使用功能:

tocomp "HERE name of folder OR name of file"

我认为我需要构建这样的功能:

tocomp() {
   if "$1 is a FILE"
      rsync -avz [email protected]:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/"
   elif "$1 is a FOLDER"
      rsync -avz [email protected]:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1"
   fi
}

但是如何检查$1是一个文件夹还是文件?

我找到了以下方法:stackoverflow.com/a/4665080/10728472。但我认为这种方法不适用于远程服务器。

如何检查$1文件夹或文件是否在远程服务器上?

答案1

用于同步目录的 rsync 命令

rsync -avz [email protected]:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1"

可以写成

rsync -avz [email protected]:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/"

两个目录都同步$1/home/comp/Torrent/$1。因此您只需要一个命令,它与文件的 rsync 命令相同。

答案2

您可以stat在远程主机上使用如下所示的命令来检查类型。您可能需要stat根据远程操作系统调整参数。这在任何 Linux 版本上都应该可以正常工作。

arg="/home/pi/Torrents/$1"

file_or_directory=`ssh [email protected] "stat --format=%F $arg" 2>&1`

if [ "$file_or_directory" = "directory" ] ; then
  echo "$arg: is a directory"
elif [ "$file_or_directory" = "regular file" ] ; then
  echo "$arg: is a file"
elif [ "$file_or_directory" = "symbolic link" ] ; then
  echo "$arg: is a link"
else
  echo "$arg: unknown"
fi

相关内容