از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
حلقه Bash از طریق فایل ها در یک دایرکتوری؟
سرفصلهای مطلب
گاهی اوقات با توجه به نیازهای ما، باید تمام فایلها و دایرکتوریهای موجود در یک پوشه مشخص را جابجا و حلقه بزنیم. فرض کنید می خواهیم یک دستور خاص را در هر پوشه و فایل دایرکتوری اجرا کنیم. برای این منظور، ما در تمام دایرکتوری ها با استفاده از حلقه ها تکرار می کنیم. تنها چند ابزار CLI یا ابزارهای خط فرمان به ما اجازه میدهند که یک فرمان را برای چندین فایل اجرا کنیم. اما در مورد ما، ما از برنامه نویسی پوسته bash و استفاده از حلقه for برای سرعت بخشیدن به هر دستوری که می خواهیم کارمان را کارآمد کنیم، استفاده می کنیم.
نه تنها در مورد ما، بلکه حلقه زدن در کل برنامه نویسی یک رویکرد و تمرین بسیار کارآمد و قدرتمند است. به دلیل حلقه زدن، می توانیم همان مفهوم را اعمال کنیم روی چندین فایل و روی گروهی از آیتم ها با استفاده از حداقل کد برای به دست آوردن خروجی مورد نظر ما. برای حلقه زدن دایرکتوریها و فایلها در bash، از یک الگوی سراسری به نام “wild card” استفاده میکنیم که یک الگوی استاندارد است که با همه فایلها مطابقت دارد. اما ما فقط دایرکتوری ها را با استفاده از “/” در انتهای دستور خود مطابقت می دهیم. پس از آن، به هر دایرکتوری مقدار دایرکتوری «dir» موجود را اختصاص می دهیم. در نهایت از دستور echo برای اجرای حلقه در دایرکتوری ها استفاده می کنیم. از نظر فنی، برای انجام کار، ابتدا باید یک متغیر را مقداردهی اولیه کنیم، سپس مجموعه داده را به متغیری که میخواهیم حلقه بزنیم، اختصاص میدهیم. در مورد ما، با استفاده از کاراکتر Wild card “*” در میان دایرکتوری ها می چرخد.
نحو:
در زیر نحوی برای چرخش در دایرکتوری ها وجود دارد.
دستورالعمل
انجام شده;
در این، ما از حلقه for به همراه متغیر “f” که ایجاد می شود استفاده می کنیم. هر بار که حلقه for اجرا می شود عملی را که باید انجام شود را مشخص می کند. سپس، پس از تعریف مجموعه دادهای که از آن عبور میکند، مسیری را تعریف میکنیم که فایلها باید از آن واکشی شوند یا به سادگی از ستاره “*” استفاده میکنیم که به کامپایلر اجازه میدهد از دایرکتوری فعلی واکشی کند. در مورد ما دو مسیر با نام “folder” گذراندیم، “/folder/*” فایلها را در پوشه واکشی میکند، در حالی که “folder/**/*” فایلها را از زیر پوشههای خود واکشی میکند.
مثال شماره 1:
ما روش حلقه زدن دایرکتوری ها یا فایل ها را امتحان خواهیم کرد تا ایده بهتری از کار آن داشته باشیم. برای آن، اجازه دهید ابتدا نسخه bash را که در حال حاضر داریم بررسی کنیم زیرا نسخه باید برای استفاده از حلقه به روز شود. برای بررسی نسخه bash دستور زیر را اجرا می کنیم:
این نسخه از bash را که در حال حاضر در سیستم ما در حال اجرا است، مانند شکل زیر نمایش می دهد، در سیستم ما، “5.0،17” است.
حال برای انجام حلقه، ابتدا یک دایرکتوری جدید در سیستم خود ایجاد می کنیم که در آن چند فایل اضافه می کنیم. برای ایجاد یک دایرکتوری جدید، دستور زیر را اجرا می کنیم:
پس از اجرای دستور بالا، هیچ چیزی را اجرا نمی کند، فقط دستور را تحویل می دهد terminal برای اجرای دستورات بیشتر، همانطور که در زیر می بینیم.
حال برای بررسی اینکه آیا دایرکتوری ما با موفقیت ساخته شده است یا خیر، به سراغ فایل های موجود در سیستم خود می رویم و سپس به داخل دایرکتوری خانه می رویم، می توانید پوشه ای به نام لینوکس ایجاد شده را مشاهده کنید. ممکن است یک سوال در ذهن شما ایجاد شود که چرا ما در حال بررسی پوشه در فهرست اصلی هستیم؟ این فقط به این دلیل است که ما هیچ مسیری برای آن ارائه نکرده ایم، به همین دلیل است که همیشه پوشه ها یا فایل های جدیدی را به طور پیش فرض در فهرست اصلی ایجاد می کند.
اکنون، ما باید فایلهایی را در دایرکتوری لینوکس ایجاد کنیم تا ابتدا با استفاده از دستور “cd” مانند شکل زیر به دایرکتوری لینوکس خود منتقل شویم:
پس از اجرای دستور ما terminal، شبیه این خواهد شد.
با استفاده از دستور “echo”، با اجرای دستور زیر یک فایل جدید با مقداری متن ساختگی در آن ایجاد می کنیم:
لینوکس@linux-Virtualbox:~ /لینوکس دلار اکو «جدید من فایل 1” > myfile_b.txt
لینوکس@linux-Virtualbox:~ /لینوکس دلار اکو «جدید من فایل 1” > myfile_c.txt
لینوکس@linux-Virtualbox:~ /لینوکس دلار اکو «جدید من فایل 1” > myfile_d.txt
ما 4 فایل را در دایرکتوری لینوکس خود ایجاد کرده ایم که آنها را “myfile_a”، “myfile_b” نامگذاری کرده ایم.
“myfile_c” و “myfile_d” که در قطعه زیر میتوانیم ببینیم. راههای مختلفی برای ایجاد فایلهای جدید مانند استفاده از ویرایشگر متن نانو، استفاده از دستور cat، استفاده از فرمان لمسی و بسیاری موارد دیگر وجود دارد. استفاده از اکو اجباری نیست، می توانید از هر دستوری که می خواهید استفاده کنید.
همانطور که فایل های خود را ایجاد کرده ایم، زمان آن فرا رسیده است که همه فایل ها را با استفاده از حلقه for فهرست کنیم. برای انجام این کار، دستور دیگری را اجرا می کنیم.
در دستور بالا، یک متغیر “f” ایجاد کردیم که عملی را که انجام می شود را مشخص می کند روی اجرای حلقه در مورد ما، نام فایلهایی را که در دایرکتوری لینوکس ذخیره شدهاند، همانطور که در قطعه زیر میبینیم، نمایش میدهیم.
با استفاده از دستور بالا، نام فایل هایی که در دایرکتوری لینوکس ذخیره شده اند را نمایش می دهیم. فرض کنید میخواهیم محتوا را همراه با نام فایل نمایش دهیم، همچنین میتوان این کار را با استفاده از حلقه for به جای نوشتن دستور echo بارها و بارها انجام داد.
همانطور که در زیر نشان داده شده است، محتوای تمام فایل ها در زیر جدا شده با خط جدید نمایش داده می شود. در دستور بالا، یک متغیر “f” ایجاد کردیم، نیازی به ایجاد همان متغیر نیست. شما می توانید هر متغیری را با توجه به نیاز خود ایجاد کنید، استفاده از “f” اجباری نیست.
نتیجه
امروز به بررسی حلقه زدن از طریق دایرکتوری ها پرداختیم، حلقه for را به شما معرفی کردیم که برای واکشی فایل ها از دایرکتوری ها و همچنین با آثار آن استفاده می شود. ما روش استفاده از “for loop” برای واکشی دایرکتوری ها را با استفاده از یک مثال ساده برای شما توضیح دادیم که در آن ابتدا یک فهرست و فایل های جدید ایجاد کردیم، سپس به سادگی با استفاده از “for loop” به آنها دسترسی پیدا کردیم.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-29 12:54:03