非典型的“ ls”或如何招待linuxoids

在圣彼得堡Linuxblood社区SPbLUG的电报聊天中,我抛出了一个有趣的谜题:
在不使用ls或其别名的情况下,使用尽可能多的方法列出主目录中的文件(1个方法-1点)

后来,同一任务又进行了另一个聊天 ,结果如下:

1.回显和打印


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

完全相同的结果将导致用print代替echo命令。
实际上,您可以不使用循环来完成任务,结果不会那么漂亮,但它适合任务的条件。

 echo ~/* ~/.* 

2.树


一种更明显的方法是使用树,如果选择正确的键,则实际上是ls。

 tree -aiL 1 ~ 

3.找到


也是一个明显的解决方案。

 find ~ -maxdepth 1 -mindepth 1 

4.杜


是的,人们并没有忘记du。

 du -ad 1 ~ 

5.焦油


我们转向具有微妙变态的水程序

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

6. 7. Perl和Python


因为在出现问题的情况下,我忘了对解释器进行限制,而在现代Linux中,解释器通常是开箱即用的,所以厨师和毒蛇农无法逃脱:
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的源代码分发给了人们,但是即使编译器几乎存在于任何地方,除了任何嵌入式发行版之外,我都认为这完全是一团糟。 ;-)

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

聚苯乙烯


可能在coreutils / findutils中的某个地方,娱乐的参与者错过了一些东西。 尝试使用更少/更多的方法没有成功,但是也许哈勃罗夫斯克人也对标准实用程序的非标准用法有了一些想法。

更新。 1个


谢谢哈伯! 评论,这只是某种假期! 根据他们的动机,我正在准备一个新职位。 保持联系!

更新。 2


正如我所承诺的, Marlezon芭蕾舞的第二部分。

Source: https://habr.com/ru/post/zh-CN466987/


All Articles