مثال استخدامات الأمر "xargs"

الوصف والمقدمة

يتم استخدام الأمر xargs عادة في سطر الأوامر حيث يتم تمرير إخراج أمر واحد كوسيطة الإدخال إلى أمر آخر.

في العديد من الحالات ، لا توجد حاجة إلى أمر خاص مثل xargs لإنجاز ذلك ، نظرًا لأن مشغلي "الأنبوب" و "إعادة التوجيه" يقومون بنفس المعاملة النوعية. ومع ذلك ، في بعض الأحيان هناك مشاكل مع آلية الأنابيب وإعادة التوجيه الأساسية ، على سبيل المثال ، إذا كانت الحجج تحتوي على مسافات ، فإن xargs تتغلب عليها.

بالإضافة إلى ذلك ، xargs ينفذ الأمر المحدد مرارا وتكرارا ، إذا لزم الأمر ، لمعالجة جميع الوسائط المعطاة لها. في الواقع ، يمكنك تحديد عدد الوسائط التي يجب قراءتها من دفق الإدخال القياسي في كل مرة ينفذ فيها xargs الأمر المحدد.

بشكل عام ، يجب استخدام الأمر xargs إذا كان سيتم استخدام إخراج أمر واحد كجزء من الخيارات أو الوسيطات للأمر الثاني الذي يتم بث البيانات إليه (باستخدام عامل تشغيل الأنبوب "|"). تكون المواسير العادية كافية إذا كانت البيانات مخصصة لتكون الإدخال (القياسي) للأمر الثاني.

على سبيل المثال ، إذا استخدمت الأمر ls لإنشاء قائمة بأسماء ومجلدات الملفات ، ثم قم بتوجيه هذه القائمة إلى الأمر xargs الذي يقوم بتنفيذ echo ، فيمكنك تحديد عدد أسماء الملفات أو أسماء الدلائل التي تتم معالجتها بواسطة echo على كل تكرار كما يلي: :

ls | xargs -n 5 صدى

في هذه الحالة ، يسترد صدى خمسة أسماء ملف أو دليل في كل مرة. بما أن الصدى يضيف حرفًا جديدًا في النهاية ، يتم كتابة خمسة أسماء في كل سطر.

إذا قمت بتنفيذ أمر يقوم بإرجاع عناصر أرقام كبيرة وغير متوقعة (مثل أسماء الملفات) التي يتم تمريرها إلى أمر آخر لمزيد من المعالجة ، فمن الجيد التحكم في الحد الأقصى لعدد الوسائط التي يتلقاها الأمر الثاني لتجنب التحميل الزائد والتعطل.

يقوم سطر الأوامر التالي بتصنيف دفق أسماء الملفات الناتجة عن البحث عن int في مجموعات 200 قبل تمريرها إلى الأمر cp ، الذي يقوم بنسخها إلى دليل النسخ الاحتياطي .

find ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

يحدد "./" عنصر في الأمر find الدليل الحالي للبحث. تقوم الوسيطة "-pepe f" بتقييد البحث إلى الملفات ، وعلامة "-name" * .txt "تقوم بتصفية أي شيء ليس له امتداد" .txt ". يشير علم -i الموجود في xargs إلى أن { } الترميز يمثل كل اسم ملف البخار.

يجد الأمر التالي الملفات المسماة الأساسية في أو أسفل الدليل / tmp وحذفها.

البحث عن / 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>

يتم تعريف سلسلة الاستبدال باسم "{}". وهذا يعني أن أي تكرارات "{}" في وسيطات الأمر يتم استبدالها بعنصر الإدخال الذي تم إعادة توجيهه إلى args خلال عملية توجيه الإخراج . يمكّنك هذا من وضع عناصر الإدخال في مواضع معينة في وسيطات الأمر المطلوب تنفيذها (بشكل متكرر).