چگونه می توان دایرکتوری های تطبیق را در 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
در این شرایط این یک رویکرد انعطاف پذیر و مؤثر برای مدیریت دایرکتوری ها و پرونده های خود به شما می دهد!