Назад | Перейти на главную страницу

Как проверить: переменная функции - это путь к папке или файлу на удаленном сервере?

Мне нужно использовать 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 это папка или файл на удаленном сервере?

Ты можешь использовать 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

Ваша команда 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 для файла.