Command-Line-Interface

如何檢查:函式變數是遠端伺服器上文件夾或文件的路徑嗎?

  • April 28, 2019

我需要使用rsyncscp將文件或文件夾從遠端伺服器複製到電腦。

要複製(同步)文件夾,我使用以下功能:

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

引用自:https://serverfault.com/questions/964958