PP مستندات فضای ابری پارس‌پک
rclone · Homebrew · zsh

rclone را در macOS راه بیندازید

rclone را با Homebrew نصب می‌کنید، مشخصات پارس‌پک را در یک Remote می‌گذارید و آپلود، خواندن و دانلود یک فایل کوچک را از Terminal امتحان می‌کنید.

مخصوص macOSنصب با Homebrewقابل اجرا در zsh
اجرای rclone روی macOS متصل به فضای ذخیره‌سازی
شش فرمان با خروجی نمونه

پس از نصب rclone در macOS، با یک فایل کوچک مطمئن می‌شوید همه‌چیز درست است: hello.txt را با کلید tutorial/hello.txt می‌فرستید، فهرست و مشخصاتش را بررسی می‌کنید، یک کپی محلی می‌گیرید و سپس آن را حذف می‌کنید. نمای کلی این آزمون در صفحهٔ اصلی rclone است.

اگر Remote هنوز مقدار پنل ندارد، هیچ فرمانی کار نمی‌کند. اگر آپلود را نزده‌اید، مشخصات و دانلود معمولاً آرایه خالی یا خطا می‌دهند.

۱

rclone را با Homebrew نصب کنید

پس از نصب، با rclone version مطمئن شوید Terminal نسخهٔ درست را اجرا می‌کند.

اگر به‌جای brew، Zip را مستقیم از rclone.org دانلود کنید، macOS آن باینری را Quarantine می‌کند و اجرا رد می‌شود («cannot be opened because the developer cannot be verified»). با brew این پیش نمی‌آید؛ اگر مجبور شدید دستی نصب کنید، اول xattr -d com.apple.quarantine ./rclone را بزنید.
terminal (bash) · نصب و بررسی
brew install rclone
rclone version
ساختار فایل‌ها
examples/
├── .env.example
└── rclone/
  └── run.sh      # آپلود، فهرست، مشخصات، دانلود و حذف با rclone
۲

Remote را با مقدارهای پنل بسازید

Endpoint، Region و دو کلید را در Remote می‌گذارید و نام Bucket را در فرمان‌ها می‌نویسید. برای دیدن محل واقعی تنظیمات از rclone config file استفاده کنید؛ مسیر معمول در macOS برابر ~/.config/rclone/rclone.conf است.

اسکریپت نمونه examples/rclone/run.sh از متغیر محیطی استفاده می‌کند، نه فایل تنظیمات؛ پنج مقدار PARSPACK_S3_* را می‌خواند و خودش به نام‌های rclone تبدیل می‌کند. اگر rclone config را برای استفاده تعاملی هم زده‌اید، مشکلی ندارد — متغیر محیطی همیشه روی مقدار داخل فایل تنظیمات اولویت دارد.
terminal (bash) · تنظیم Remote با متغیر محیطی
export RCLONE_CONFIG_PARSPACK_TYPE=s3
export RCLONE_CONFIG_PARSPACK_PROVIDER=Other
export RCLONE_CONFIG_PARSPACK_ENDPOINT=https://c123456.parspack.net
export RCLONE_CONFIG_PARSPACK_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export RCLONE_CONFIG_PARSPACK_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
export RCLONE_CONFIG_PARSPACK_REGION=us-east-1
export RCLONE_CONFIG_PARSPACK_NO_CHECK_BUCKET=true
!

این مقدارها را در اسکریپت‌های Public قرار ندهید. اگر از rclone config برای فایل تنظیمات استفاده می‌کنید، همان فایل را هم جایی Commit نکنید.

۳

Remote را پیش از انتقال فایل امتحان کنید

rclone lsd parspack:c123456

این فرمان پوشه‌های سطح بالای باکت را نشان می‌دهد؛ هنوز کاری با فایل شما ندارد. اگر Endpoint یا کلیدها اشتباه باشد، همین‌جا خطا می‌گیرید — نه در آپلود.
terminal (bash)
rclone lsd parspack:c123456
خروجی نمونه
-1 2026-08-18 10:00:00 -1 tutorial
۴

آپلود: فایل را در باکت بگذارید

rclone copyto ./hello.txt parspack:c123456/tutorial/hello.txt

copyto دقیقاً یک فایل را با یک نام مشخص کپی می‌کند؛ با copy اشتباه نگیرید که مقصد را همیشه پوشه فرض می‌کند و اسم فایل محلی را زیر آن پوشه تکرار می‌کند. بعد از آپلود، rclone حجم فایل محلی را با چیزی که همان لحظه از باکت خوانده مقایسه می‌کند؛ اگر یکی نبود «corrupted on transfer» می‌دهد و حداکثر سه بار دوباره می‌فرستد.
terminal (bash)
rclone copyto ./hello.txt parspack:c123456/tutorial/hello.txt
خروجی نمونه
(بدون خروجی؛ یعنی آپلود موفق بوده — برای دیدن جزئیات از -v استفاده کنید)
!

اگر tutorial/hello.txt از قبل وجود داشته باشد، Upload جدید همان مسیر را جایگزین می‌کند.

۵

فهرست فایل‌ها و مشخصات یک فایل

بعد از آپلود، اول ببینید فایل در فهرست هست؛ بعد حجم و نوع را بدون دانلود بخوانید.

اسلش انتهای مسیر یعنی «این یک پوشه است»؛ خروجی یک آرایه JSON از فایل‌های همان پوشه است، نه محتوای خود فایل‌ها. آرایه خالی دو تا علت دارد: یا آپلود قبل از این فرمان انجام نشده، یا مسیر Prefix را غلط نوشته‌اید — این دو را با زدن rclone lsd روی یک سطح بالاتر از هم جدا کنید.
برای مشخصات یک فایل، همان lsjson را با مسیری بزنید که دقیقاً به نام فایل ختم می‌شود، نه اسلش؛ rclone یک آرایه تک‌عضوی برمی‌گرداند، نه یک شیء تنها — کد شما باید عضو صفرم آرایه را بخواند.
terminal (bash) · فهرست پوشه
rclone lsjson parspack:c123456/tutorial/
خروجی نمونه
[ {"Path":"hello.txt","Name":"hello.txt","Size":15,"MimeType":"text/plain","ModTime":"2026-08-18T10:00:00.000000000Z","IsDir":false} ]
terminal (bash) · مشخصات یک فایل
rclone lsjson parspack:c123456/tutorial/hello.txt
خروجی نمونه
[ {"Path":"hello.txt","Name":"hello.txt","Size":15,"MimeType":"text/plain","ModTime":"2026-08-18T10:00:00.000000000Z","IsDir":false} ]
اسلش انتهامسیر با / یعنی پوشه؛ بدون آن یعنی یک فایل دقیق.
IsDirبرای فایل همیشه false است؛ برای پوشه true.
آرایه خالییعنی آپلود انجام نشده یا مسیر اشتباه است.
۶

دانلود: فایل را روی سیستم خودتان بنویسید

rclone copyto parspack:c123456/tutorial/hello.txt ./downloads/hello.txt

همان copyto است، فقط جهت را برعکس کرده‌اید: مبدأ مسیر روی باکت، مقصد مسیر محلی. پوشه مقصد اگر نباشد، rclone خودش می‌سازدش؛ اگر مسیر محلی از قبل با همین نام وجود داشته باشد، بدون هشدار رویش می‌نویسد.
terminal (bash)
rclone copyto parspack:c123456/tutorial/hello.txt ./downloads/hello.txt
خروجی نمونه
(بدون خروجی؛ یعنی دانلود موفق بوده — برای دیدن جزئیات از -v استفاده کنید)
۷

حذف: نام را از باکت بردارید

rclone deletefile parspack:c123456/tutorial/hello.txt

deletefile دقیقاً یک فایل را حذف می‌کند. با delete اشتباه نگیرید؛ آن دستور روی مسیر پوشه‌ای اجرا می‌شود و همه محتوایش را پاک می‌کند.
terminal (bash)
rclone deletefile parspack:c123456/tutorial/hello.txt
خروجی نمونه
(بدون خروجی؛ یعنی حذف موفق بوده — برای دیدن جزئیات از -v استفاده کنید)
۸

خطا را از مبدا پیدا کنید

اول دوباره فهرست Bucket را بگیرید. اگر همان فرمان هم خطا دارد، تنظیمات Remote یا دسترسی شبکه را بررسی کنید؛ بقیهٔ فرمان‌ها به همان اتصال وابسته‌اند.

کد خروج 0 یعنی موفق؛ هر عدد دیگری یعنی حداقل یک فرمان شکست خورده. متن خطا همیشه روی stderr است، نه stdout — اگر خروجی را redirect کرده‌اید، پیام خطا در فایل شما نیست. برای دیدن چه درخواستی واقعاً رفته، -vv اضافه کنید؛ این پرچم هر HTTP request را هم نشان می‌دهد.
خطاعلت معمولبررسی
command not found: rcloneنصب کامل نشده یا Homebrew در PATH نیستbrew doctor و دوباره باز کردن ترمینال را امتحان کنید
NoSuchBucketنام Bucket با مقدار پنل یکی نیستبخش بعد از parspack: در مسیر
SignatureDoesNotMatch / AccessDeniedکلیدها یا Region درست نیست، یا Provider را AWS گذاشته‌ایدaccess_key_id، secret_access_key، region، provider = Other
didn't find section in config fileنام Remote را اشتباه تایپ کرده‌ایدنام دقیقاً باید parspack باشد
Timeout / connection refusedEndpoint در دسترس نیستآدرس HTTPS پنل، بدون تغییر و بدون / انتها
۹

کل آزمون را یک‌جا اجرا کنید

اسکریپت نمونه، همان مراحل را با متغیرهای محیطی تکرار می‌کند. آن را از ریشهٔ پروژه اجرا کنید تا مسیرهای نسبی درست باشند.

terminal (bash) · از ابتدا تا انتها
brew install rclone

export RCLONE_CONFIG_PARSPACK_TYPE=s3
export RCLONE_CONFIG_PARSPACK_PROVIDER=Other
export RCLONE_CONFIG_PARSPACK_ENDPOINT=https://c123456.parspack.net
export RCLONE_CONFIG_PARSPACK_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export RCLONE_CONFIG_PARSPACK_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
export RCLONE_CONFIG_PARSPACK_REGION=us-east-1
export RCLONE_CONFIG_PARSPACK_NO_CHECK_BUCKET=true

printf 'hello ParsPack\n' > hello.txt
rclone lsd parspack:c123456
rclone copyto ./hello.txt parspack:c123456/tutorial/hello.txt
rclone lsjson parspack:c123456/tutorial/
rclone lsjson parspack:c123456/tutorial/hello.txt
rclone copyto parspack:c123456/tutorial/hello.txt ./downloads/hello.txt
rclone deletefile parspack:c123456/tutorial/hello.txt
launchdبرای اجرای زمان‌بندی‌شده با launchd، همین export را در اسکریپت فراخوانی‌شده بگذارید؛ launchd محیط ترمینال شما را نمی‌بیند.
به‌جای rclone.confروی ماشین‌های بدون دسترسی تعاملی، متغیرهای محیطی را در تعریف Job بگذارید.
نسخهrclone version را قبل از گزارش مشکل چک کنید؛ رفتار بین نسخه‌های قدیمی و جدید کمی فرق دارد.
سناریوی کامل macOS آماده است.نصب، تنظیم Remote و شش فرمان در همین صفحه است؛ اسکریپت خودکار در examples/rclone/run.sh.
دریافت rclone.zip