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.