Linux - comando para listar arquivos (exceto ls)

26

Imagine you were working on a system and someone accidentally deleted the ls command (/bin/ls). How could you get a list of the files in the current directory? Try it.

Eu tentei muitos métodos e também procurei na Internet, mas nada. Eu quero perguntar ao lado de ls o comando que podemos usar para listar todos os arquivos.

    
por Eduard Florinescu 10.04.2011 / 16:47

12 respostas

33

echo *

... mostrará arquivos na pasta atual através da globalização de arquivos em shells compatíveis com Bourne.

Isso lista todos os arquivos em um nível:

echo */*

No Bash, se globstar estiver definido (definido com shopt -s globstar , não configurado com shopt -u globstar ), isso listará todos os arquivos recursivamente:

echo **
    
por 10.04.2011 / 16:48
22
find -maxdepth 1 
find -maxdepth 1 -ls

menos TAB TAB

localiza o switch -ls é independente de / bin / ls e possui seu próprio formato, além de exibir informações detalhadas:

127432    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/falsch/.hiddenfalsch
127447    0 lrwxrwxrwx   1 stefan   stefan          9 Apr  8 22:51 ./temp/falsch/linkfalsch -> subfalsch
127427    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/.hiddenmusik

outra, detalhes mostrando possibilidade, é stat

stat *
  File: 'halx0o'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 102701      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2009-07-23 03:16:15.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
  File: 'ho ho ho'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 115835      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2010-07-24 14:12:48.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
    
por 10.04.2011 / 16:52
10

Para fazer com que pareça com ls , usaria o loop for do Bash:

for i in *; do echo $i; done

Se isso não funcionar, eu tentarei o Python ;) :

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
    
por 10.04.2011 / 17:03
6

Bom ol 'vim;) (com classificação, navegação, etc)

vim .
    
por 10.04.2011 / 22:59
5
find .

Embora você provavelmente queira inserir os parâmetros que você precisa,

    
por 10.04.2011 / 16:52
3

lsattr ./*

getfacl ./* também exibirá permissões

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* funciona com o GNU awk

debugfs /dev/sdX substitui sdX com qualquer partição que você queira fazer um ls on, então você pode ls dentro do debugfs

debugfs:  cd /
debugfs:  ls -l
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 .
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 ..
     11   40700 (2)      0      0   16384  5-Jul-2010 09:59 lost+found
 2392065   40755 (2)      0      0    4096  5-Jul-2010 09:59 boot
 2228225   40755 (2)      0      0    4096  5-Jul-2010 09:59 sys
 1376257   40755 (2)      0      0    4096  5-Jul-2010 09:59 proc
 4915201   40755 (2)      0      0    4096  5-Jul-2010 09:59 dev
 3473409   40755 (2)      0      0   12288 10-Apr-2011 22:05 etc
  98305  100644 (1)      0      0       0  6-Jul-2010 12:05 .autofsck
 3342337   40755 (2)      0      0    4096  5-Apr-2011 15:05 var
 3932161   41777 (2)      0      0    4096 10-Apr-2011 22:11 tmp
  ..........
debugfs:  

lynx ./

mc supondo que você tenha o midnight commander instalado

    
por 11.04.2011 / 04:22
3

Semelhante à versão echo , mas isso imprime uma entrada por linha para maior legibilidade:

printf %s\n ./*

ou

printf '%s\n' ./*

Recursivamente (para o bash 4+; outros shells precisam de uma opção diferente para configurá-lo ou ter o globstar ativado por padrão):

shopt -s globstar
printf %s\n ./**/*
    
por 23.07.2013 / 19:00
2

Que tal o comando dir ? :)

/bin/dir

    
por 23.07.2013 / 17:56
1

Bem, se eu não puder usar ls dentro do modo shell do emacs, eu posso mudar para o modo eshell ou apenas dired.

    
por 10.04.2011 / 21:31
1

Se eu tiver o bash shell iniciado (ou qualquer outro shell com conclusão), eu provavelmente apenas digitaria '*' e depois a guia.

Ou, como normalmente faço X, também posso fazer 'nautilus', mas tudo bem para humanos.

Eu também posso tentar / usr / bin / lsattr

Mas, no mundo real, o que eu realmente faria se isso acontecesse comigo certamente seria:

sudo apt-get install --reinstall coreutils
    
por 10.04.2011 / 23:31
1

No bash, ou um shell com conclusão de tabulação semelhante, você não precisa usar um comando real: wibble seguido por duas guias você obterá uma lista de arquivos no diretório atual e wibble /bin/ seguido por duas abas mostrará o que sobrou de / bin. Uma vez eu me encontrei nessa situação (na verdade, eu havia matado / bin completamente junto com algumas outras coisas), e comecei usando a abordagem echo * @STATUS_ACCESS_DENIED sugerida, mas finalmente achei a conclusão da tabulação mais conveniente.

    
por 12.04.2011 / 01:28
0

Outra maneira com tree , não mencionada em nenhum lugar aqui, é recursiva e diferente de find ou ls você não tem erros (como: Permission denied , Not a directory ) você também obtém o caminho absoluto no caso de você deseja alimentar os arquivos para xargs ou outro comando

tree -fai /pathYouWantToList >listOfFiles.list

o significado das opções:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       '.').  In no event does tree print the file system constructs '.'  (current  directory)  and  '..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.
    
por 08.02.2017 / 02:27