Bash

Raspberry Pi 到電腦 - 腳本文件傳輸和刪除

  • January 27, 2021

這是我的第一個 Bash 腳本,我已經盡我所能自己找到了大部分答案,但我終於遇到了障礙。

該腳本似乎(大部分)有效,但我沒有收到 iMac 方面的文件。

這裡的想法是有一個專用的 RPi torrent 盒子,自動文件 xfer 到主電腦,然後在 RPi 系統上清理目錄/文件以節省空間。

該腳本似乎可以處理向其拋出的任何目錄和/或文件,空格等不會影響其啟動 SCP 的能力。

我需要有 Bash 腳本經驗的人檢查語法以找出我的錯誤。這是我的完整腳本。任何提高效率的提議將不勝感激。

更新了迄今為止使用的更正。

縮小問題範圍:select_target_directory功能 我做這target_directory_selected=部分是否正確?不確定這個變數是否被填充。

#!/bin/bash

# variables declared
directory_on_localhost="/mnt/32gb_pny_usbdrive/completed/*"
directory_on_remote_host_primary="/Volumes/Drobo/zIncoming"
directory_on_remote_host_secondary="/Users/josh/Desktop/zIncoming"
target_directory_selected=""

# functions defined
# This function basically verifies the Drobo is mounted on the iMac.
select_target_directory () {
   if [ 'ssh josh@10.0.1.2 test -d /Volumes/Drobo/zIncoming' ]
   then
       target_directory_selected="$directory_on_remote_host_primary"
   else
       target_directory_selected="$directory_on_remote_host_secondary"
   fi
}

# This function copies target <directories/files> to the target directory (via scp)
# and then deletes them from the local machine to conserve valuable storage space.
process_the_files () {
   for current_target in $directory_on_localhost
   do
        scp -r "$current_target" josh@10.0.1.2:"$target_directory_selected"
        rm -rf "$current_target"
   done
}

# main logic begins
# [Tests "$directory_host" for contents] && [iMac status (i.e. powered off or on)]
# IF "$directory_host" is not empty AND iMac is powered on THEN functions are invoked
# And Main Logic is completed and script ends, ELSE script ends.
if [ "$(ls -A $directory_on_localhost)" ] && [ 'nc -z 10.0.1.2 22 > /dev/null' ]
then
   select_target_directory
   process_the_files
else
   exit
fi
# main logic ends

而不是這個:

if [ 'ssh josh@10.0.1.2 test -d /Volumes/Drobo/zIncoming' ]
then
    target_directory_selected="$directory_on_remote_host_primary"
else
    target_directory_selected="$directory_on_remote_host_secondary"
fi

你可能是這個意思:

if ssh josh@10.0.1.2 test -d /Volumes/Drobo/zIncoming
then
   target_directory_selected="$directory_on_remote_host_primary"
else
   target_directory_selected="$directory_on_remote_host_secondary"
fi

請注意,這[ 'non-empty string' ]始終是正確的。您可能想在ssh命令上使用條件,就像我為您重寫它的方式一樣。

同樣,稍後在腳本中您可能想要替換[ 'nc -z 10.0.1.2 22 > /dev/null' ]nc -z 10.0.1.2 22 > /dev/null.

引用自:https://unix.stackexchange.com/questions/230537