نحوه کپی کردن دایرکتوری در لینوکس #
دایرکتوری یک ساختار سیستم فایل است که شامل فایلها و دایرکتوریهای دیگر میشود. دایرکتوریها فایلها را در یک ساختار سلسله مراتبی سازماندهی میکنند که به کاربران و سیستمهای عامل در مدیریت دادهها کمک میکند. هر دایرکتوری میتواند شامل فایلها و دایرکتوریهای دیگر باشد که به آنها زیردایرکتوری نیز گفته میشود و یک ساختار درختی شکل با شاخههایی که به سطوح مختلف دادهها منتهی میشوند، ایجاد میکند.
این مقاله نحوه کپی کردن یک دایرکتوری در لینوکس با استفاده از cpدستور و Rsync را توضیح میدهد.
پیش نیازها #
قبل از شروع، شما نیاز دارید:
- به عنوان یک کاربر sudo غیر ریشه به یک نمونه مبتنی بر لینوکس دسترسی داشته باشید .
دستورات کپی کردن دایرکتوریها در لینوکس #
دستورات زیر برای کپی کردن دایرکتوریها در لینوکس استفاده میشوند.
cpفرمان #
دستور کپی cpبرای کپی کردن فایلها و دایرکتوریها در لینوکس استفاده میشود. دستور کپی در تمام توزیعهای لینوکس موجود است و از سینتکس زیر پیروی میکند:
cp [OPTIONS]... [SOURCE] [DESTINATION]OPTIONS: پرچمهایی که رفتار دستور را تغییر میدهند.SOURCE: فایل یا دایرکتوری که میخواهید کپی کنید را مشخص میکند.DESTINATION: مسیر دایرکتوری که میخواهید منبع را به آن کپی کنید یا نام فایلی که میخواهید یک فایل را کپی و تغییر نام دهید.cpاگر دایرکتوری مقصد وجود نداشته باشد، دستور به طور خودکار آن را ایجاد میکند.
cpگزینههای فرمان #
گزینههایی که میتوانید با این cpدستور استفاده کنید، در زیر آمده است.
| گزینه | توضیحات |
|---|---|
-rیا-R | به صورت بازگشتی دایرکتوریها و محتویات آنها را کپی میکند. |
-a | دایرکتوریها را به صورت بازگشتی کپی میکند و پیوندهای نمادین، مجوزهای فایل، مالکیتها و مهرهای زمانی را حفظ میکند. |
-v | فایلها و دایرکتوریهای در حال کپی شدن را نشان میدهد. |
-p | ویژگیهای فایل مانند حالت، مالکیت و مهرهای زمانی را حفظ کنید. |
برای کسب اطلاعات بیشتر در مورد cp، مقاله مفصل ما در مورد استفاده از cpدستور را بررسی کنید .
rsyncفرمان #
این rsyncدستور، فایلها و دایرکتوریها را بین دو مکان، چه به صورت محلی و چه از راه دور، همگامسازی میکند. در زیر، سینتکس (نحوه نگارش) موارد استفاده مختلف آمده است. این دستور میتواند فایلها را به صورت محلی و بین یک سیستم محلی و یک سیستم از راه دور کپی کند. Rsync با مقایسه مهرهای زمانی و اندازه فایلها، تعیین میکند که چه چیزی باید کپی شود، و این آن را برای پشتیبانگیری و انتقال دادههای در مقیاس بزرگ مناسب میکند.
- کپی محلی
rsync [OPTIONS]... [SOURCE_DIRECTORY]/ [DESTINATION_DIRECTORY]/ - کپی محلی به راه دور
rsync [OPTIONS]... [SOURCE_DIRECTORY]/ [USER@REMOTE_HOST]:[DESTINATION_DIRECTORY]/ - کپی از راه دور به محلی
rsync [OPTIONS]... [USER@REMOTE_HOST]:[SOURCE_DIRECTORY]/ [DESTINATION_DIRECTORY]/
توضیح نحو #
OPTIONS: پرچمهایی که رفتار دستور را تغییر میدهند، مانند-a(حالت بایگانی را برای حفظ مجوزها و ویژگیها فعال میکند)، -v (خروجی مفصل را نمایش میدهد)، یا-r(کپی بازگشتی را انجام میدهد).SOURCE_DIRECTORY/: دایرکتوری که از آن کپی میشود. علامت اسلش (/) محتویات دایرکتوری را کپی میکند، نه خود دایرکتوری را.DESTINATION_DIRECTORY/: دایرکتوری مقصد برای کپی کردن محتویات. اگر وجود نداشته باشد، Rsync آن را ایجاد میکند.USER@REMOTE_HOST: سیستم راه دور را با نام کاربری، نام میزبان یا آدرس IP برای انتقالهای از راه دور مشخص میکند.
rsyncگزینههای فرمان #
میتوانید از گزینههای زیر به همراه rsyncدستور استفاده کنید.
| گزینه | توضیحات |
|---|---|
-a | حالت بایگانی را فعال میکند، که شامل کپی بازگشتی ( -r) است، پیوندهای نمادین، مجوزهای فایل، مهرهای زمانی، اطلاعات مالک و گروه را حفظ میکند. |
-v | خروجی دقیقی از فرآیند کپی را نشان میدهد. |
-r | دایرکتوریها و محتویات آنها را کپی میکند. |
-z | فشردهسازی دادههای فایل در حین انتقال برای کاهش استفاده از پهنای باند. |
برای کسب اطلاعات بیشتر در مورد این دستور ، مقاله مفصل ما در مورد استفاده از rsync را بررسی کنید.
کپی کردن یک دایرکتوری با استفاده از cpدستور #
در این بخش، شما یک ساختار دایرکتوری ایجاد خواهید کرد، فایلها و محتوا را اضافه خواهید کرد و دایرکتوریها را با استفاده از cpدستور و پرچمهای مختلف کپی خواهید کرد.
- یک دایرکتوری جدید در دایرکتوری کاری فعلی خود ایجاد کنید.کنسول
$ mkdir sample - به دایرکتوری ایجاد شده بروید.کنسول
$ cd sample
- یک فایل با نام ایجاد کنید
file1.txt.کنسول$ touch file1.txt - محتوا را به
file1.txtفایل اضافه کنید.کنسول$ echo "This is a sample file in the main directory." > file1.txt
- یک زیرشاخه مانند
folder1داخلsampleدایرکتوری ایجاد کنید.کنسول$ mkdir folder1 - یک فایل داخلش ایجاد کن
folder1.کنسول$ touch folder1/file2.txt - محتوا را به فایل اضافه کنید.کنسول
$ echo "This file is inside folder1." > folder1/file2.txt
- با استفاده از دستور،
folder1آن را در دایرکتوری کپی کنید .folder1-backupcpکنسول$ cp -r folder1 folder1-backupاین
-rگزینه کپی بازگشتی را فعال میکند، که تمام محتوای دایرکتوری نمونه را کپی میکند. - برای تأیید کپی، محتوای دایرکتوری را فهرست کنید.کنسول
$ ls -R - به دایرکتوری والد برگردید.کنسول
$ cd ..
- کل
sampleدایرکتوری را درsample-copyدایرکتوری کپی کنید.کنسول$ cp -r sample sample-copy sampleدایرکتوری را با استفاده از پرچمهای-v و کپی کنید-p.کنسول$ cp -rvp sample sample-copy-rvpاین دستور به صورت بازگشتی
sampleدایرکتوری را به کپی میکندsample-copy-rvp، ویژگیهای فایل را حفظ میکند و خروجی دقیقی را نمایش میدهد.sampleبا استفاده از پرچم، با استفاده از دایرکتوری کپی کنید-a.کنسول$ cp -a sample sample-copy-aاین دستور
sampleدایرکتوری راsample-copy-aدر حالت بایگانی کپی میکند.- با دستور زیر تأیید کنید که کپیها وجود دارند و شامل ساختار صحیح هستند.کنسول
$ ls -l sample sample-copy sample-copy-rvp sample-copy-aاین دستور هر دایرکتوری و محتویات آن را با جزئیات فهرست میکند.
در خروجی، توجه کنید که
sample-copyیک مهر زمانی جدیدتر دارد. این به این دلیل است که دستور کپی از پرچمهای-por استفاده نکرده است-a. هر دوsample-copy-rvpوsample-copy-aمهرهای زمانی و مجوزهای اصلی را از فهرست نمونه حفظ کردهاند.
کپی کردن یک دایرکتوری با استفاده از Rsync #
Rsync یک ابزار خط فرمان قدرتمند برای همگامسازی فایلها و دایرکتوریها است. این ابزار از Rsync پیشرفتهتر cpو برای پشتیبانگیری، بهروزرسانیهای جزئی و انتقال دادههای بزرگ مفیدتر است. برخلاف cp، rsync فقط تفاوتهای بین دایرکتوریهای مبدا و مقصد را کپی میکند که باعث صرفهجویی در زمان و پهنای باند میشود. برای کپی کردن دایرکتوریها با استفاده از Rsync، مراحل زیر را دنبال کنید.
- Rsync به طور پیشفرض در اکثر توزیعهای لینوکس نصب شده است. بررسی کنید که آیا در سیستم شما موجود است یا خیر.کنسول
$ rsync --versionاگر Rsync وجود ندارد، برای نصب آن به مراحل نصب Rsync مراجعه کنید .
- مطمئن شوید که در دایرکتوری هستید که دایرکتوری نمونه در آن قرار دارد.
sampleبرای تأیید ساختار آن، محتویات را مشاهده کنید .کنسول$ ls -R sample- با استفاده از Rsync، دایرکتوری را در یک دایرکتوری جدید کپی کنید
sample.کنسول$ rsync -av sample/ sample-rsync/این دستور محتویات دایرکتوری را
sampleدرsample-rsync/حالت بایگانی کپی میکند، ویژگیهای فایل را حفظ میکند و خروجی مفصل را نمایش میدهد. - پس از کپی کردن، محتویات را بررسی کنید.کنسول
$ ls -R sample-rsyncاین دستور محتویات
sample-rsyncدایرکتوری را فهرست میکند. - یک فایل جدید به
sampleدایرکتوری اضافه کنید.کنسول$ echo "This is a new file." > sample/extra.txt
این دستور فایلی ایجاد میکند که در دایرکتوری وجود ندارد
sample-rsync. - پیشنمایش تغییرات بدون اعمال آنها با استفاده از
--dry-runپرچم.--dry-runپرچم در rsync بدون ایجاد هیچ تغییری در فایلها یا دایرکتوریها، اتفاقاتی را که در طول یک کپی رخ میدهد، شبیهسازی میکند.کنسول$ rsync -av --dry-run sample/ sample-rsync/خروجی:
sending incremental file list ./ extra.txt sent 254 bytes received 24 bytes 556.00 bytes/sec total size is 123 speedup is 0.44 (DRY RUN)توجه داشته باشیدextra.txtدر خروجی ظاهر میشود زیرا جدید است و درsample-rsyncدایرکتوری نیست. Rsync تغییرات را شناسایی و فهرست میکند، در این مورد، فقطextra.txtفایل، و تغییرات را کپی میکند و انتقال را کارآمد میسازد. - از rsync برای بهروزرسانی
sample-rsyncدایرکتوری و مشاهدهی پیشرفت انتقال فایل در لحظه با استفاده از--progressflag استفاده کنید.کنسول$ rsync -av --progress sample/ sample-rsync/خروجی:
sending incremental file list ./ extra.txt ۲۰ ۱۰۰% ۰.00kB/s 0:00:00 (xfr#1, to-chk=5/7) sent 314 bytes received 40 bytes 708.00 bytes/sec total size is 123 speedup is 0.35از خروجی، میتوانید ببینید که Rsync فقط
extra.txtفایل تازه ایجاد شده را کپی میکند. - بررسی کنید که آیا فایل جدید در دایرکتوری کپی شده ظاهر میشود یا خیر.کنسول
$ ls -R sample-rsync - حذف یک فایل از
sampleدایرکتوری.کنسول$ rm sample/extra.txt --deleteاز این پرچم برای حذف فایلهاییsample-rsyncکه دیگر در … وجود ندارند استفاده کنیدsample. Rsync با حذف فایل، مقصد را بهروزرسانی میکند.کنسول$ rsync -av --delete sample/ sample-rsync-copy/- با اجرای دستور زیر، تأیید کنید که هر دو دایرکتوری همگامسازی شدهاند.کنسول
$ ls -l sample sample-rsyncخروجی:
sample: total 12 -rw-rw-r-- 1 user user 45 May 7 06:06 file1.txt drwxrwxr-x 2 user user 4096 May 7 06:06 folder1 drwxrwxr-x 2 user user 4096 May 7 06:07 folder1-backup sample-rsync: total 12 -rw-rw-r-- 1 user user 45 May 7 06:06 file1.txt drwxrwxr-x 2 user user 4096 May 7 06:06 folder1 drwxrwxr-x 2 user user 4096 May 7 06:07 folder1-backupمیتوانید ببینید که
extra.txtاز هر دو دایرکتوری حذف شده است و بقیه ساختار بدون تغییر باقی مانده است.
نتیجهگیری #
شما با استفاده از دستور و Rsync دایرکتوریها را در لینوکس کپی کردهاید cp. میتوانید از این دستورات بر اساس موارد استفاده خود استفاده کنید. برای گزینههای بیشتر دستور، man cpدستور را برای مشاهده cpصفحه راهنما و man rsyncدستور را برای مشاهده صفحه راهنمای Rsync اجرا کنید.