Как стать автором
Обновить

Нетипичный «ls» или как развлекаются линуксоиды

Время на прочтение 2 мин
Количество просмотров 33K
Однажды в телеграм чат питерского сообщества линуксоидов SPbLUG я кинул забавную задачку:
Выведите список файлов в домашней директории максимально возможным количеством способов, без использования ls или его алиасов(1 способ — 1 балл)

Такое же задание чуть позже прилетело в ещё один чат, и вот что из этого получилось:

1. echo и print


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

Ровно то же самое выдаст замена команды echo на print.
На самом деле можно обойтись и без цикла, получится не так красиво, но под условие задачи вполне подходит.

echo ~/* ~/.*

2. tree


Более очевидный способ — использовать tree, который практически ls если подобрать правильные ключи.

tree -aiL 1 ~

3. find


Тоже более чем очевидное решение.

find ~ -maxdepth 1 -mindepth 1

4. du


Да, про du народ не забыл.

du -ad 1 ~

5. tar


Переходим к водным процедурам тонким извращениям.

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

6. 7. Perl и Python


Так как в условии задачи я забыл поставить ограничение на интерпретаторы, которые в современных линуксах обычно есть в системе из коробки, то кашевары и змееводы не смогли остаться в стороне:
Perl:

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

Python:

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

Вне конкурса


Выдали на гора даже исходник на C, но хоть компилятор и присутствует практически везде, кроме всяких emmbedded дистрибутивов, я посчитал это уж совсем полным беспределом. ;-)

#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;
}

P.S.


Вероятно, где-то в coreutils/findutils участники развлекухи что-то пропустили. Были неудачные попытки использовать less/more, но может у хабровчан тоже появились идеи по нестандартному использованию стандартных утилит.

Upd. 1


Спасибо хабр! Комменты, это просто праздник какой-то! И по их мотивам я готовлю новый пост. Оставайтесь на связи!

Upd. 2


Как я и обещал, вторая часть «Марлезонского балета».
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+67
Комментарии 136
Комментарии Комментарии 136

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн