我需要使用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