English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أمر xargs في Linux

مجمع الأوامر في لينكس

xargs (بالإنجليزية: eXtended ARGuments) هو مرشح يُستخدم لتقديم معلمات للأوامر، وهو أيضًا أداة لدمج عدة أوامر.

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

يمكن أيضًا استخدام xargs لتحويل إدخال النص الواحد أو المتعدد إلى تنسيقات أخرى، مثل تحويل النص المتعدد إلى نص واحد، والنص الواحد إلى نص متعدد.

الافتراض في xargs هو echo، مما يعني أن الإدخال المُنقل إلى xargs عبر الأنبوب سيشمل النصوص المعقوفة والفراغات، ولكن سيتم استبدال النصوص المعقوفة والفراغات بالمسافات من خلال معالجة xargs.

xargs هو الأمر القوي، يمكنه التقاط输岀 الأمر، ثم نقلها إلى الأمر الآخر.

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

find /sbin -perm +700 |ls -l       #هذا الأمر هو الخطأ
find /sbin -perm +700 |xargs ls -l   #هذا هو الشكل الصحيح

يستخدم xargs عادةً مع أنبوب.

تنسيق الأمر:

somecommand |xargs -item  command

الإعدادات:

  • -a file يُقرأ من ملف كstdin.

  • -e flag، تنبه إلى أن بعض الأحيان قد يكون -E، يجب أن يكون flag هو علامة منفصلة بالمسافات، عندما يكتشف xargs وجود علامة تحتوي على flag يوقف.

  • -p يسأل المستخدم كل مرة يتم تنفيذ argument.

  • -n num يُضاف إلى عدد المرات، مما يعني عدد الأنواع التي يستخدمها الأمر أثناء التنفيذ مرة واحدة، والمعدل هو استخدام الكل.

  • -t يُظهر الأمر أولاً، ثم يتم تنفيذه.

  • -i أو -I، هذا يعتمد على دعم Linux، يُعطى كل اسم عنصر xargs، عادةً على خط واحد، ويُعطى {}، يمكن استبدال {}.

  • -r no-run-if-empty عندما يكون إدخال xargs فارغًا يتوقف xargs دون الحاجة إلى تنفيذ أي شيء.

  • -s تعداد تعداد بیشترین کاراکترهای خط فرمان، به معنای بیشترین کاراکترهای خط فرمان پس از xargs است.

  • -L تعداد تعداد خطوطی که از ورودی استاندارد یک بار خوانده می‌شوند به فرمان ارسال می‌شوند.

  • -l  همانند -L.

  • -d delim جداکننده، پیش‌فرض جداکننده xargs خطfeed است، جداکننده پارامترها فضاست، در اینجا جداکننده xargs تغییر می‌کند.

  • -x معنی خروج، به طور کلی با -s استفاده می‌شود.

  • -P تعداد بیشترین فرآیندها، پیش‌فرض 1 است، زمانی که 0 است به معنای as many as it can است، این نمونه‌ای که من فکر نکردم، باید در روزمره استفاده شود؟.

مثال آنلاین

xargs به عنوان ابزار جایگزینی استفاده می‌شود، داده‌های ورودی را خواند، داده‌ها را مجدداً فرمت می‌کند و به خروجی می‌دهد.

یک فایل تستی تعریف شده، شامل داده‌های چند خطی است:

# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

ورودی چند خطی به خروجی یک خطی تبدیل می‌شود:

# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

گزینه -n برای خروجی چند خطی استفاده می‌شود:

# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

گزینه -d می‌تواند یک محدودیت شخصی‌سازی شده را تعیین کند:

# echo "nameXnameXnameXname" | xargs -dX
name name name name

با استفاده از گزینه -n ترکیب شود:

# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

stdin را خواند، پارامترهای فرمت شده را به فرمان ارسال می‌کند

فرض کنید یک فرمان به نام sk.sh و یک فایل ذخیره‌کننده پارامترها به نام arg.txt وجود دارد:

#!/bin/bash
# محتوای فرمان sk.sh، همه پارامترها را چاپ می‌کند.
echo $*

محتوای فایل arg.txt:

# cat arg.txt
aaa
bbb
ccc

xargs ینای یک گزینه -I، با استفاده از -I یک رشته جایگزینی {} را مشخص می‌کند، این رشته در زمان توسعه xargs جایگزین خواهد شد، زمانی که -I با xargs ترکیب شود، هر یک از فرمان‌های پارامترها یک بار اجرا خواهد شد:

# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

نسخ جميع ملفات الصور إلى مجلد /data/images

ls *.jpg | xargs -n1 -I {} cp {} /data/images

استخدام xargs مع find

عند محاولة حذف عدد كبير من الملفات باستخدام rm، قد تحصل على رسالة خطأ:/bin/rm Argument list too long. استخدام xargs لتجنب هذه المشكلة:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 يستخدم \0 كحرف الفصل

حساب عدد الأسطر في جميع ملفات php في مجلد المصدر:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

البحث عن جميع ملفات jpg وضغطها:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

تطبيقات أخرى لـ xargs

إذا كان لديك ملف يحتوي على العديد من URL تريد تنزيلها، يمكنك استخدام xargs لتنزيل جميع الروابط:

# cat url-list.txt | xargs wget -c

مجمع الأوامر في لينكس