Bash
Raspberry Pi 到電腦 - 腳本文件傳輸和刪除
這是我的第一個 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
.