Linux - comando per elencare i file (tranne ls)


27

Immagina di lavorare su un sistema e che qualcuno abbia cancellato accidentalmente il lscomando ( /bin/ls). Come hai potuto ottenere un elenco dei file nella directory corrente? Provalo.

Ho provato molti metodi e ho anche cercato su Internet ma niente. Voglio chiedere accanto al lscomando quale comando possiamo usare per elencare tutti i file.

Risposte:


35
echo *

... mostrerà i file nella cartella corrente tramite il globbing dei file su shell compatibili con Bourne.

Questo elenca tutti i file di un livello inferiore:

echo */*

In Bash, se globstar è impostato (impostato con shopt -s globstar, non impostato con shopt -u globstar), questo elencherà tutti i file in modo ricorsivo:

echo **

10
Oltre all'esercizio di compiti a casa, echo *è utile nella pratica, quando hai rovinato il tuo sistema in modo da non poter eseguire alcun programma (ad esempio, rimosso libc.soo ld.so), ma hai ancora una shell in esecuzione.
Gilles 'SO- smetti di essere malvagio' il

3
In bash4 (penso) e zsh, puoi usare echo **/*anche questo in modo ricorsivo.
Reid

@Reid: lo proverò. Bella scoperta.
0xC0000022L

Bene, @Gilles. Ho imparato che dai vecchi sistemi DEC che non potevano avere accesso a / usr o / bin in determinate condizioni di avvio e script di avvio necessari per far funzionare da soli 'cat' e 'ls'.
Arcege,

1
bello, ho imparato a conoscere echo * da ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry l'

23
find -maxdepth 1 
find -maxdepth 1 -ls

Di meno TAB TAB

trova -ls switch è indipendente da / bin / ls e ha un suo formato e visualizza informazioni dettagliate:

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

un altro, i dettagli che mostrano la possibilità, è 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

10

Per farlo sembrare ls, userò il forloop di Bash :

for i in *; do echo $i; done

Se non funziona, proverei Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"

import glob; print '\n'.join(glob.glob('/home/*'))funzionerebbe altrettanto bene.
Arcege,

6

Good ol 'vim;) (con ordinamento, navigazione, ecc.)

vim .

6
find .

Anche se probabilmente vorrai inserire qualsiasi parametro limitante di cui hai bisogno.


3

lsattr ./*

getfacl ./* visualizzerà anche le autorizzazioni

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* funziona con GNU awk

debugfs /dev/sdX sostituisci sdX con qualunque partizione su cui vuoi fare una ls, quindi puoi farlo all'interno di 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 supponendo che tu abbia installato il comandante di mezzanotte


3

Simile alla echoversione, ma questo stampa una voce per riga per una maggiore leggibilità:

printf %s\\n ./*

o

printf '%s\n' ./*

Ricorsivamente (per bash 4+; altre shell hanno bisogno di un'opzione diversa per impostarlo o hanno globstar abilitato di default):

shopt -s globstar
printf %s\\n ./**/*

Non è necessario per '/ *', **se globstarè impostato un semplice verrà inserito in tutte le directory . Passa a printf '%s' **.


1

Bene, se non potessi usare ls all'interno della modalità shell di emacs, potrei passare alla modalità eshell o solo a un dired.


1

Se avessi avviato la shell bash (o qualsiasi altra shell con completamento), probabilmente avrei semplicemente digitato '*' quindi tab.

Oppure, dato che di solito ho avviato X, posso anche semplicemente fare "nautilus", ma OK è per gli umani.

Potrei anche provare / usr / bin / lsattr

Ma nel mondo reale quello che farei davvero se mi succedesse una cosa del genere sarebbe sicuramente:

sudo apt-get install --reinstall coreutils

1

In bash, o una shell con un simile completamento di tabulazione, non è necessario usare un vero comando: wibbleseguita da due schede ti porterà un elenco di file nella directory corrente e wibble /bin/seguita da due schede ti mostrerà cosa a sinistra di / bin. Una volta mi sono trovato in questa situazione (in realtà, avevo ucciso / bin interamente insieme ad alcune altre cose) e ho iniziato usando l' echo *approccio suggerito da @STATUS_ACCESS_DENIED, ma alla fine ho trovato il completamento della scheda più conveniente.


0

Un altro modo con tree, non menzionato da nessuna parte qui, va in modo ricorsivo e trovare differenza o ls non avete eventuali errori (come: Permission denied, Not a directory) si ottiene anche il percorso assoluto nel caso in cui si desidera alimentare i file xargso altro comando

tree -fai /pathYouWantToList >listOfFiles.list

le opzioni che significano:

-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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.