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 .