[Linux] كيفية الانضمام إلى عدة أسطر من أسماء الملفات في واحد مع محدد مخصص؟


Answers

تحرير : ببساطة " ls -m " إذا كنت تريد أن يكون لديك محدد فاصلة

آه ، القوة والبساطة!

ls -1 | tr '\n' ','

تغيير الفاصلة " ، " إلى كل ما تريد. لاحظ أن هذا يتضمن "فاصلة زائدة"

Question

أود الانضمام إلى نتيجة ls -1 في سطر واحد وترسيمها بكل ما أريد.

هل هناك أي أوامر لينكس قياسية يمكنني استخدامها لتحقيق ذلك؟




يبدو أن الإجابات موجودة بالفعل.

إذا كنت تريد تنسيق a, b, c ، استخدم ls -m ( إجابة Tulains Córdova )

أو إذا كنت تريد تنسيق abc ، استخدم ls | xargs ls | xargs (نسخة مبسطة من إجابة Chris J )

أو إذا كنت تريد أي محدد آخر مثل | استخدم ls | paste -sd'|' ls | paste -sd'|' (تطبيق إجابة آرتيم )




هذا الأمر هو لمحبي PERL:

ls -1 | perl -l40pe0

هنا 40 هو رمز ascii الثماني للمساحة.

-p ستقوم بمعالجة الخط عن طريق الخط والطباعة

-l سوف نحرص على استبدال \ n الزائدة بحرف ascii الذي نقدمه.

-e هو إبلاغ PERL نحن نقوم بتنفيذ سطر الأوامر.

0 يعني أن هناك في الواقع لا يوجد أمر لتنفيذ.

perl -e0 يساوي perl -e ''




فقط باش

mystring=$(printf "%s|" *)
echo ${mystring%|}



يمكنك استخدام:

ls -1 | perl -pe 's/\n$/some_delimiter/'



ينتج ls إخراج عمود واحد عند توصيله إلى توجيه ، لذلك فإن -1 زائد.

هنا إجابة perl أخرى باستخدام وظيفة joinin المدمجة التي لا تترك محددًا لاحقًا:

ls | perl -F'\n' -0777 -anE 'say join ",", @F'

غامض -0777 يجعل قراءة بيرل جميع المدخلات قبل تشغيل البرنامج.

بديل البديل الذي لا يترك محدد زائدة

ls | sed '$!s/$/,/' | tr -d '\n'



لا ينصح بتعديل ls بشكل عام ، لذا فإن أفضل طريقة بديلة هي استخدام find ، على سبيل المثال:

find . -type f -print0 | tr '\0' ','

أو باستخدام find paste :

find . -type f | paste -d, -s

للانضمام إلى عدة أسطر عامة (لا تتعلق بنظام الملفات) ، تحقق من: "join" مختصر ومحمول على سطر أوامر Unix .




يمكن الجمع بين إعداد IFS واستخدام "$*" القيام بما تريد. أنا باستخدام subshell لذلك أنا لا تتداخل مع IFS $ shell هذا

(set -- *; IFS=,; echo "$*")

لالتقاط الإخراج ،

output=$(set -- *; IFS=,; echo "$*")



ls لديه الخيار -m لتحديد الإخراج مع ", " فاصلة ومسافة.

ls -m | tr -d ' ' | tr ',' ';'

piping هذه النتيجة إلى tr لإزالة إما المساحة أو الفاصلة سيسمح لك توجيه الأنبوبة مرة أخرى إلى tr لاستبدال المحدد.

في المثال الخاص بي أنا استبدال محدد , مع محدد ;

استبدل مع أي حرف حرف واحد تفضله لأن tr فقط لحساب الحرف الأول في السلاسل التي تمر بها كوسائط.