و "ls" غير نمطية أو كيف يتم ترفيه linuxoids

مرة واحدة في دردشة برقية من مجتمع سان بطرسبرج Linuxblood SPbLUG رميت لغز مضحك:
أدرج الملفات الموجودة في الدليل الرئيسي بأكثر من طريقة ممكنة ، دون استخدام ls أو الأسماء المستعارة له (طريقة واحدة - نقطة واحدة)

انتقلت المهمة نفسها لاحقًا إلى دردشة أخرى ، وهنا ما جاء منها:

1. الصدى والطباعة


for i in ~/* ~/.* ; do echo $i ; done 

بالضبط سيتم إرجاع نفس الشيء عن طريق استبدال أمر echo بالطباعة.
في الواقع ، يمكنك الاستغناء عن دورة ، وسوف تتحول ليس بشكل جميل ، لكنه يناسب شرط المهمة.

 echo ~/* ~/.* 

2. شجرة


هناك طريقة أكثر وضوحًا هي استخدام الشجرة ، والذي يكون عمليًا إذا اخترت المفاتيح الصحيحة.

 tree -aiL 1 ~ 

3. تجد


أيضا أكثر من حل واضح.

 find ~ -maxdepth 1 -mindepth 1 

4. دو


نعم ، الناس لم ينسوا دو.

 du -ad 1 ~ 

5. القطران


ننتقل إلى إجراءات المياه مع الانحرافات خفية.

 tar -cvf /dev/null --no-recursion ~/* ~/.* 2>null 

6. 7. بيرل وبيثون


نظرًا لأنني في حالة المشكلة نسيت أن أضع قيودًا على المترجمين الفوريين ، الذين في نظام Linux الحديث عادة ما يكونون خارج النظام ، لم يتمكن الطهاة ومزارعو الثعابين من الابتعاد:
بيرل:

 perl -e 'use feature "say"; opendir my $dh, "." or die "Could not open . for reading: $!\n"; while (my $thing = readdir $dh) { say $thing; };' 

الثعبان:

 echo -e "import os\nfor i in os.listdir(os.getenv('HOME')): print(i)" | python 

خارج المنافسة


لقد قاموا حتى بإعطاء الكود المصدري لـ C إلى الجبل ، لكن على الرغم من وجود المترجم في كل مكان تقريبًا ، باستثناء أي توزيعات مُرمز إليها ، فقد اعتبرت ذلك فوضى كاملة تمامًا. ؛-)

 #include <stdio.h> #include <stdlib.h> #include <dirent.h> #define HOME getenv("HOME") int main(int argc, char const *argv[]) { struct dirent *dp; DIR *dir = opendir(HOME); while ((dp = readdir(dir)) != NULL) printf("%s\n", dp->d_name); closedir(dir); return 0; } 

PS


ربما ، في مكان ما في coreutils / findutils ، غاب المشاركون في تسلية شيء. كانت هناك محاولات فاشلة لاستخدام أقل / أكثر ، ولكن ربما حصل أفراد هابروفسك أيضًا على أفكار حول الاستخدام غير القياسي للأدوات المساعدة القياسية.

محدث. 1


شكرا هابر! التعليقات ، هذا هو مجرد نوع من عطلة! واستنادا إلى دوافعهم ، أنا أستعد وظيفة جديدة. ابقى على اتصال

محدث. 2


كما وعدت ، الجزء الثاني من مارليزون باليه .

Source: https://habr.com/ru/post/ar466987/


All Articles