برنامه نویسی

چگونه می توان دایرکتوری های تطبیق را در Bash بدون فیلمنامه کپی کرد؟

در این مقاله ، ما در مورد نحوه کپی کردن کارآمد پرونده ها از یک دایرکتوری به دیگری در حالی که اطمینان حاصل می کنیم فقط با الگوهای تطبیق خاص برخورد می کنیم ، بحث خواهیم کرد. به طور خاص ، اگر ساختار دایرکتوری دارید و می خواهید یک پرونده به نام را کپی کنید goodfile از source_dir به زیر مجموعه های مربوطه در dest_dir با نام هایی که با الگوی مطابقت دارند ??-??، می توانید با استفاده از دستورات ساده Bash به این هدف برسید. بیایید درست شیرجه بزنیم!

درک ساختار دایرکتوری

وظیفه مورد نظر کپی کردن پرونده ها بر اساس یک کنوانسیون نامگذاری خاص است. شما ساختار دایرکتوری زیر را دارید:

در این مثال ، شما در حال تلاش برای کپی کردن goodfile از source_dir برای مطابقت با دایرکتوری در dest_dir که از قالب پیروی می کنند ??-??، مانند aa-aa وت bb-bbبشر

چرا دستورات قبلی شکست خوردند؟

وقتی سعی کردید دستورات را با استفاده از xargs، موضوعات اصلی مربوط به نحوه انجام تعویض در دستور بود. در باش ، {} اغلب به عنوان یک مکان نگهدارنده برای خروجی از دستور قبلی استفاده می شود. با این حال ، شما باید اطمینان حاصل کنید که در متن مسیرهای پرونده به درستی تفسیر شده است.

راه حل گام به گام

بیایید دستور را برای انجام موثر کار بازنویسی کنیم. استفاده از ترکیبی از یک حلقه و تعویض فرمان مناسب نتایج بهتری خواهد داشت. مراحل زیر را دنبال کنید:

مرحله 1: تغییر به فهرست مقصد

اول ، ما به dest_dirبشر

cd /tmp/dest_dir  

مرحله 2: استفاده از حلقه برای کپی کردن پرونده ها

اکنون ، ما می توانیم از a استفاده کنیم for حلقه برای تکرار بیش از دایرکتوری هایی که با الگوی مورد نیاز مطابقت دارند. به این ترتیب ، ما می توانیم مسیرهای صحیح را برای کپی کردن بسازیم goodfileبشر

for dir in ??-??; do  
    if [ -d "$dir" ]; then  
        cp "/tmp/source_dir/$dir/goodfile" "$dir/"  
    fi  
done  

در این حلقه:

  • ??-?? دایرکتوری ها را در dest_dir تطبیق الگوی مشخص شده.
  • چک if [ -d "$dir" ]; تضمین می کند که ما فقط سعی می کنیم از دایرکتوری ها کپی کنیم.
  • در cp نقل و انتقالات فرمان goodfile از فهرست منبع مربوطه تا مقصد همسان.

مرحله 3: تأیید عملیات

برای اطمینان از کپی کردن پرونده ها به درستی ، می توانید محتویات دایرکتوری مقصد خود را با استفاده از:

ls /tmp/dest_dir/??-??/  

این دستور به تأیید حضور کمک می کند goodfile در دایرکتوری های مطابق با الگوی مشخص شده.

سوالات متداول

آیا می توانم از این روش برای انواع دیگر پرونده ها استفاده کنم؟

بله ، می توانید شرایط حلقه و نام پرونده ها را بر این اساس تنظیم کنید تا پرونده های مختلف را بر اساس معیارهای مشخص شده کپی کنید.

چه می شود اگر بخواهم پرونده ها را به صورت بازگشتی کپی کنم؟

برای کپی بازگشتی ، اضافه کردن -r گزینه به cp دستور:

pc -r ...  

آیا راهی برای رسیدگی به خطاها در هنگام کپی کردن وجود دارد؟

برای رسیدگی به خطاهای احتمالی ، می توانید بررسی خطا را بعد از آن اضافه کنید cp دستور:

if cp ...; then  
    echo "File copied successfully"  
else  
    echo "Failed to copy file"  
fi  

این استراتژی به شما کمک می کند تا سناریوهایی را که ممکن است پرونده ها وجود نداشته باشد یا سایر موارد کپی ایجاد نمی شود ، مدیریت کنید.

پایان

کپی کردن پرونده ها بین دایرکتوری ها در Bash بر اساس الگوهای تطبیق می تواند فقط با چند دستور انجام شود. با استفاده از یک حلقه برای عبور از فهرست مقصد خود و کپی کردن پرونده های مورد نظر از منبع ، از مشکلات احتمالی استفاده جلوگیری می کنید xargs در این شرایط این یک رویکرد انعطاف پذیر و مؤثر برای مدیریت دایرکتوری ها و پرونده های خود به شما می دهد!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا