انتقال فایلها بین سیستمها یکی از وظایف رایج برای توسعهدهندگان و مدیران سیستم است. استفاده از دستور scp
(مخفف secure copy) امکان انتقال امن فایلها را از طریق SSH فراهم میکند. با این حال، اگر بخواهید فقط خود فایلها را بدون پوشهای که در آن قرار دارند منتقل کنید، باید از دستور بهدرستی استفاده کنید. این راهنما توضیح میدهد که چگونه میتوان تمام فایلهای یک پوشه را به مقصدی در سرور دیگر منتقل کرد، بدون اینکه خود پوشه نیز منتقل شود.
کپی کردن تمام فایلهای داخل یک پوشه با استفاده از SCP
گام ۱: ترمینال یا Command Prompt را در سیستمی که فایلها روی آن قرار دارند باز کنید. مطمئن شوید که به سرور مقصد دسترسی SSH دارید و دستور scp
روی سیستم شما نصب است. برای بررسی نصب بودن scp، دستور زیر را اجرا کنید:
scp -V
در صورت نصب بودن، نسخه scp نمایش داده میشود. اگر نصب نیست، آن را با استفاده از مدیر بسته سیستمعامل خود نصب کنید.
گام ۲: به پوشهی مادر پوشهای که فایلها در آن هستند بروید. برای مثال، اگر فایلها در مسیر /home/user/myfiles/
قرار دارند، دستور زیر را اجرا کنید:
cd /home/user/myfiles
گام ۳: برای کپی کردن تمام فایلها (بدون کپی کردن خود پوشه)، از دستور زیر استفاده کنید. کاراکتر *
تمام فایلهای داخل پوشه فعلی را انتخاب میکند:
scp * username@remote_host:/path/to/remote/destination/
در این دستور، username
نام کاربری در سرور مقصد، remote_host
آدرس سرور و /path/to/remote/destination/
مسیر مقصد روی سرور است. این دستور فقط فایلها را کپی میکند، نه پوشهها.
گام ۴: برای کپی فایلهای مخفی (که با نقطه شروع میشوند)، دستور را اینگونه تغییر دهید:
scp ./* ./.??* username@remote_host:/path/to/remote/destination/
دستور .*
شامل .
و ..
هم میشود که معمولا نباید منتقل شوند. الگوی .??*.
فایلهای مخفی با حداقل دو کاراکتر بعد از نقطه را انتخاب میکند و از این مشکل جلوگیری میکند.
گام ۵: اگر نیاز دارید فایلها و زیرپوشهها را (بدون پوشه مادر) منتقل کنید، از گزینه -r
برای کپی بازگشتی استفاده کنید:
scp -r * username@remote_host:/path/to/remote/destination/
این دستور تمام فایلها و زیرپوشههای پوشه فعلی را منتقل میکند، اما خود پوشه مادر را منتقل نمیکند.
روش جایگزین: استفاده از کوتیشن برای جلوگیری از مشکلات گسترش شل
در مواقعی که تعداد فایلها زیاد است یا نام فایلها کاراکترهای خاص دارند، گسترش خودکار شل ممکن است با مشکل مواجه شود. در این حالت، استفاده از find
به همراه xargs
راهحل بهتری است:
find . -maxdepth 1 -type f -print0 | xargs -0 scp -t username@remote_host:/path/to/remote/destination/
در این دستور، گزینه -maxdepth 1
فقط پوشه فعلی را جستجو میکند و -type f
فقط فایلها را انتخاب میکند.
کپی کردن فایلها با پسوند خاص
اگر فقط میخواهید فایلهایی با یک پسوند خاص (مثلاً .txt
) را منتقل کنید، از الگوی زیر استفاده کنید:
scp *.txt username@remote_host:/path/to/remote/destination/
این دستور فقط فایلهای مطابق با الگو را منتقل میکند.
استفاده از scp
به این روش باعث میشود ساختار پوشههای سرور مقصد مرتب باقی بماند و از ایجاد پوشههای تودرتو جلوگیری شود. همیشه مسیر مقصد و الگوهای انتخاب فایل را بررسی کنید تا از رونویسی یا جا افتادن فایلها جلوگیری شود.