Command-Line-Interface
如何檢查:函式變數是遠端伺服器上文件夾或文件的路徑嗎?
我需要使用
rsync
或scp
將文件或文件夾從遠端伺服器複製到電腦。要複製(同步)文件夾,我使用以下功能:
foldertocomp() { rsync -avz pi@192.168.1.5:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1" }
我可以使用以下函式來複製文件:
filetocomp() { rsync -avz pi@192.168.1.5:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/" }
或者
filetocomp() { scp pi@192.168.1.5:"'/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 pi@192.168.1.5:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/" elif "$1 is a FOLDER" rsync -avz pi@192.168.1.5:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1" fi }
但是如何檢查
$1
是文件夾還是文件?我找到了以下方法:stackoverflow.com/a/4665080/10728472。但我認為這種方法不適用於遠端伺服器。
如何檢查
$1
遠端伺服器上的文件夾或文件?
用於同步目錄的 rsync 命令
rsync -avz pi@192.168.1.5:"'/home/pi/Torrents/$1'"/* "/home/comp/Torrent/$1"
可以寫成
rsync -avz pi@192.168.1.5:"'/home/pi/Torrents/$1'" "/home/comp/Torrent/"
兩者都將目錄同步
$1
到/home/comp/Torrent/$1
. 所以你只需要一個命令,它與文件的 rsync 命令相同。
您可以
stat
在遠端主機上使用如下所示的命令來檢查類型。您可能需要stat
根據您的遠端作業系統調整參數。這應該適用於任何 Linux 風格。arg="/home/pi/Torrents/$1" file_or_directory=`ssh pi@192.168.1.5 "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