my_cloud
اگر شما به یک میزبان راهدورِ اجرا کننده یک سرویسدهنده پوسته امن(ssh) دسترسی دارید، این اسکریپت یک «Dropbox عصر حجر» فراهم میکند. برای استفاده از این اسکریپت شما به یک دایرکتوری به نام cloud
در داخل دایرکتوری خانگی خود روی میزبان راهدور نیاز دارید. آنوقت میتوانید فایلها را به دایرکتوری cloud
روی میزبان راهدور کپی(قرار بدهید)، از آن کپی( دریافت کنید)، فایلهای آن را لیست کرده، و یا حذف نمایید.
مثالها
me@linuxbox ~ $ my_cloud -c me@remotehost -l
فایلهای دایرکتوری cloud
روی میزبان راهدور را لیست میکند.
me@linuxbox ~ $ my_cloud -c me@remotehost -p .bashrc
فایل .bashrc روی میزبان محلی را به دایرکتوری cloud
در میزبان راهدور کپی میکند.
me@linuxbox ~ $ my_cloud -c me@remotehost -g my_file
فایل my_file را از دایرکتوری cloud
روی میزبان راهدور به دایرکتوری جاری در میزبان محلی کپی میکند.
me@linuxbox ~ $ my_cloud -c me@remotehost -d my_file
فایل my_file را از دایرکتوری cloud
روی میزبان راهدور حذف مینماید.
توجه نمایید که اسکریپت فقط فایلها میان سیستمها رامنتقل میکند، نه دایرکتوریها را کپی میکند، و نه همچون یک سرویسگیرنده واقعی ذخیره ابری همگام سازی یک دایرکتوری با دایرکتوری دیگر را فراهم میکند.
نکته
برای بهبودبخشی به سهولت استفاده، میتوانید یک مستعار به فایل .bashrc خودتان اضافه کنید برای آنکه نیاز به مشخص کردن user@host جهت میزبانها را که بارها استفاده میکنید برطرف نمایید:
alias mc_remotehost='my_cloud -c me@remotehost'
#!/bin/bash
# ---------------------------------------------------------------------------
# my_cloud - ذخیره و بازیابی فایلها روی سرویسدهنده راهدور
# Copyright 2013, William Shotts <bshotts@users.sourceforge.com>
# این برنامه نرمافزار آزاد است: شما میتوانید آن را تحت شرایط نگارش
# گنو یا به انتخاب خودتان هر نگارش پس از آن که GPL شماره 3 مجوز
# .توسط بنیاد نرمافزارهای آزاد اعلام گردیده، توزیع و یا ویرایش کنید
# این برنامه به امید آنکه سودمند باشد توزیع میگردد، اما بدون هرگونه
# تعهد حتی تعهد ضمنی کیفیت یا صلاحیت برای یک مقصود خاص. برای جزییات
# .ببینید (http://www.gnu.org/licenses/) گنو را در GPL بیشتر مجوز
# :پیشنیازها
# انتظار دارد که میزبانهای راهدور دارای یک دایرکتوری my_cloud
# .در داخل دایرکتوری خانه کاربر باشند cloud به نام
# :نحوه کاربرد
# my_cloud -h|--help
# my_cloud -c|--cloud user@host -l|--list
# my_cloud -c|--cloud user@host -g|--get file...
# my_cloud -c|--cloud user@host -p|--put file...
# my_cloud -c|--cloud user@host -d|--delete file...
# :تاریخچه بازبینی
# 2013-12-30 ایجاد گردید new_script اسکریپت 3.0 به وسیله نگارش
# ---------------------------------------------------------------------------
PROGNAME=${0##*/}
VERSION="0.1"
clean_up() { # انجام خانهتکانی قبل از خروج
return
}
error_exit() { # مدیریت خطای مهلک
echo -e "${PROGNAME}: ${1:-"Unknown Error"}" >&2
clean_up
exit 1
}
graceful_exit() { # خروج عادی
clean_up
exit
}
signal_exit() { # شده trap اداره سیگنالهای
case $1 in
INT) error_exit "Program interrupted by user" ;;
TERM) echo -e "\nnew_script: Program terminated" >&2 ; graceful_exit ;;
*) error_exit "new_script: Terminating on unknown signal" ;;
esac
}
usage() {
echo -e "Usage: $PROGNAME [-h ]|[-c user@host [-l]|[-g|-p|-d file...]]"
}
help_message() {
cat <<- _EOF_
$PROGNAME ver. $VERSION
Store and retrieve files on a remote server
$(usage)
Options:
-h, --help Display this help message and exit.
-c, --cloud user@host Remote server login, where 'user@host'
is the login name and host.
-l, --list List files on remote server
-g, --get file... Get file(s) from remote server
-p, --put file... Put file(s) on remote server
-d, --delete file... Delete file(s) on remote server
_EOF_
return
}
set_mode() {
if [[ $mode == "empty" ]]; then
mode=$1
else
error_exit "Only one mode (-l, -g, -p, -d) is allowed."
fi
}
# Trap سیگنالهای
trap "signal_exit TERM" TERM HUP
trap "signal_exit INT" INT
# تجزیه سطر فرمان
mode=empty
file_list=
while [[ -n $1 ]]; do
case $1 in
-h | --help) help_message; graceful_exit ;;
-c | --cloud) shift; user_host="$1" ;;
-l | --list) set_mode list ;;
-g | --get) set_mode get ;;
-p | --put) set_mode put ;;
-d | --delete) set_mode delete ;;
-* | --*) usage; error_exit "Unknown option $1" ;;
*) # پردازش شناسهها
case $mode in
get) file_list="$file_list $user_host:cloud/$1"
;;
put) [[ -f "$1" ]] && file_list="$file_list $1"
;;
delete) file_list="$file_list $1"
;;
esac
;;
esac
shift
done
# منطق اصلی
# خروج در صورتیکه میزبان راهدور تعیین نشده باشد
[[ -n "$user_host" ]] || error_exit "You must specify a user@host (-c)."
host=${user_host##*@}
case $mode in
list ) echo -e "\n### Files on host ${host}: ###"
ssh $user_host 'ls -lA cloud'
;;
get ) echo -e "\n### Getting $file_list from host $host ###"
scp -p $file_list .
;;
put ) echo -e "\n### Putting $file_list on host $host ###"
scp -p $file_list $user_host:cloud
;;
delete ) echo -e "\n### Deleting $file_list from host $host ###"
ssh $user_host "cd cloud && rm $file_list"
;;
esac
graceful_exit
|