Os "ls" atípicos ou como os linuxídeos são entretidos

Uma vez em um bate-papo por telegrama da comunidade SPbLUG de Petersburgo, lancei um quebra-cabeça engraçado:
Listar os arquivos em seu diretório pessoal com o maior número possível de métodos, sem usar ls ou seus aliases (1 método - 1 ponto)

Mais tarde, a mesma tarefa entrou em mais um bate-papo , e aqui está o que veio:

1. eco e impressão


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

Substituir o comando echo por print fará exatamente a mesma coisa.
Na verdade, você pode ficar sem um ciclo, o resultado não será tão bonito, mas se encaixa na condição da tarefa.

 echo ~/* ~/.* 

2. árvore


Uma maneira mais óbvia é usar a árvore, que é praticamente ls se você escolher as teclas certas.

 tree -aiL 1 ~ 

3. encontre


Também uma solução mais do que óbvia.

 find ~ -maxdepth 1 -mindepth 1 

4. du


Sim, as pessoas não se esqueceram do du.

 du -ad 1 ~ 

5. alcatrão


Passamos a procedimentos de água com sutis perversões.

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

6. 7. Perl e Python


Como na condição do problema, esqueci de impor uma restrição aos intérpretes, que no Linux moderno geralmente não estão disponíveis no sistema, os cozinheiros e criadores de serpentes não podiam ficar de fora:
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 

Fora de competição


Eles até forneceram o código fonte de C para a montanha, mas, embora o compilador esteja presente em quase todos os lugares, exceto em todas as distribuições incorporadas, considerei uma bagunça completamente completa. ;-)

 #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


Provavelmente, em algum lugar do coreutils / findutils, os participantes da diversão perderam alguma coisa. Houve tentativas malsucedidas de usar menos / mais, mas talvez o pessoal de Habrovsk também tenha idéias sobre o uso não padrão de utilitários padrão.

Upd. 1


Graças habr! Comentários, este é apenas um tipo de feriado! E com base em seus motivos, estou preparando um novo post. Fique em contato!

Upd. 2


Como prometi, a segunda parte do Marlezon Ballet .

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


All Articles