مثال استفاده از فرمان "xargs"

شرح و مقدمه

فرمان xargs معمولا در یک خط فرمان استفاده می شود که خروجی یک فرمان به عنوان استدلال ورودی به یک فرمان دیگر منتقل می شود.

در بسیاری از موارد، هیچ دستور خاصی مانند xargs برای انجام آن لازم نیست، زیرا اپراتورهای "pipe" و "redirection" همان معامله را انجام می دهند. با این حال، گاهی اوقات مسائل مربوط به ماشینکاری اولیه و مسیریابی مجدد وجود دارد، مثلا اگر آرگومان حاوی فضاها باشد، xargs برسد.

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

به طور کلی، دستور xargs باید مورد استفاده قرار گیرد اگر خروجی یک دستور به عنوان بخشی از گزینه ها یا استدلالات یک فرمان دوم که داده ها جریان داده می شوند (با استفاده از اپراتور لوله "|") استفاده شود. لوله کشی منظم کافی است اگر داده ها در نظر گرفته شده باشند (ورودی استاندارد) فرمان دوم.

به عنوان مثال، اگر از دستور ls برای ایجاد لیستی از نام ها و دایرکتوری ها استفاده می کنید و سپس این لیست را به فرمان xargs اجرا کنید، شما می توانید مشخص کنید که چگونه بسیاری از نام فایل یا نام دایرکتوری توسط echo در هر تکرار به صورت زیر پردازش می شوند :

ls | xargs -n 5 echo

در این مورد، echo در هر زمان پنج فایل یا نام دایرکتوری دریافت می کند. از آنجا که echo یک کاراکتر خط جدید را در انتهای اضافه می کند، پنج نام در هر خط نوشته می شوند.

اگر یک فرمان را اجرا کنید که یک عدد بزرگ و غیر قابل پیش بینی (به عنوان مثال نام فایل ها) را ارسال می کند که برای پردازش بیشتر به فرمان دیگری منتقل می شود، ایده خوبی است برای کنترل حداکثر تعداد استدلال هایی که فرمان دوم دریافت می کند برای جلوگیری از بارگذاری و توفنده.

خط فرمان زیر پشته کردن نام فایل های تولید شده توسط find int در گروه های 200 قبل از انتقال به دستور cp است که آنها را به دایرکتوری پشتیبان کپی می کند.

پیدا کنید. / -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

عنصر "./" در دستور find دایرکتوری فعلی را برای جستجو مشخص می کند. استدلال "-type f" جستجو را به فایل ها محدود می کند و پرچم "-name" * .txt بیشتر از هر چیزی که یک پسوند ".txt" ندارد را فیلتر می کند. پرچم -i در xargs سیگنال های { } نماد نشان دهنده هر نام فایل بخار است.

دستور زیر فایل هایی با نام هسته در زیر پوشه / tmp پیدا می کند و آنها را حذف می کند.

find / tmp -name core-type f-print | xargs / bin / rm -f

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

find / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

به جای گزینه -i شما می توانید از پرچم -I استفاده کنید که رشته ای را مشخص می کند که با خط ورودی در استدلال دستور به جای این مثال قرار می گیرد:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

رشته جایگزینی به عنوان "{}" تعریف شده است. این به این معنی است که هر رخداد "{}" در استدلال دستور با عنصر input ارسال شده به args از طریق عملیات لوله جایگزین می شود. این به شما این امکان را می دهد که عناصر ورودی را در موقعیت های خاص در استدلال های فرمان اجرا کنید (بارها و بارها).