- PVSM.RU - https://www.pvsm.ru -
Однажды в телеграм чат питерского сообщества линуксоидов SPbLUG я кинул забавную задачку:
Выведите список файлов в домашней директории максимально возможным количеством способов, без использования ls или его алиасов(1 способ — 1 балл)
Такое-же задание, чуть позже, прилетело в ещё один чат и вот что из этого получилось:
for i in ~/* ~/.* ; do echo $i ; done
Ровно то-же самое выдаст замена команды echo на print.
На самом деле можно обойтись и без цикла, получится не так красиво, но под условие задачи вполне подходит.
echo ~/* ~/.*
Более очевидный способ — использовать tree, который практически ls если подобрать правильные ключи.
tree -aiL 1 ~
Тоже более чем очевидное решение.
find ~ -maxdepth 1 -mindepth 1
Да, про du народ не забыл.
du -ad 1 ~
Переходим к водным процедурам тонким извращениям.
tar -cvf /dev/null --no-recursion ~/* ~/.* 2>null
Так как в условии задачи я забыл поставить ограничение на интерпретаторы, которые в современных линуксах обычно есть в системе из коробки, то кашевары и змееводы не смогли остаться в стороне:
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 osnfor 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("%sn", dp->d_name);
closedir(dir);
return 0;
}
Вероятно где-то в coreutils/findutils участники развлекухи что-то пропустили. Были неудачные попытки использовать less/more, но может у тоже появились идеи по нестандартному использованию стандартных утилит?
Автор: Вадим Прилуцкий
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/329662
Ссылки в тексте:
[1] Источник: https://habr.com/ru/post/466987/?utm_source=habrahabr&utm_medium=rss&utm_campaign=466987
Нажмите здесь для печати.