Raspberry Pi 到计算机 - 脚本化文件传输和删除

Raspberry Pi 到计算机 - 脚本化文件传输和删除

这是我的第一个 Bash 脚本,我已尽最大努力自己找到大部分答案,但我最终遇到了障碍。

该脚本似乎(大部分)有效,但我没有收到 iMac 端的文件。

这里的想法是拥有一个专用的 RPi torrent 盒子,可以自动将文件传输到主计算机,然后在 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 [email protected] 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" [email protected]:"$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

答案1

而不是这个:

if [ 'ssh [email protected] 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 [email protected] 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

相关内容