![如何检查:函数的变量是否是远程服务器上文件夹或文件的路径?](https://linux22.com/image/737086/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%EF%BC%9A%E5%87%BD%E6%95%B0%E7%9A%84%E5%8F%98%E9%87%8F%E6%98%AF%E5%90%A6%E6%98%AF%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%96%87%E4%BB%B6%E5%A4%B9%E6%88%96%E6%96%87%E4%BB%B6%E7%9A%84%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我需要使用rsync
或scp
将文件或文件夹从远程服务器复制到计算机。
要复制(同步)文件夹,我使用以下功能:
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