Linux: comando para enumerar archivos (excepto ls)

27

Imagine que estaba trabajando en un sistema y alguien eliminó accidentalmente el lscomando ( /bin/ls). ¿Cómo podría obtener una lista de los archivos en el directorio actual? Intentalo.

Probé muchos métodos y también busqué en Internet pero nada. Quiero preguntar al lado del lscomando qué comando podemos usar para enumerar todos los archivos.

Eduard Florinescu
fuente

Respuestas:

35
echo *

... mostrará archivos en la carpeta actual a través de la aplicación de archivos en shells compatibles con Bourne.

Esto enumera todos los archivos en un nivel inferior:

echo */*

En Bash, si globstar está configurado (configurado con shopt -s globstar, desactivado con shopt -u globstar), esto enumerará todos los archivos de forma recursiva:

echo **
0xC0000022L
fuente
10
Más allá del ejercicio de tarea, echo *es útil en la práctica, cuando has arruinado tu sistema para que no puedas ejecutar ningún programa (por ejemplo, lo eliminaste libc.soo ld.so), pero aún tienes un shell en ejecución.
Gilles 'SO- deja de ser malvado'
3
En bash4 (creo) y zsh, también puedes usar esto echo **/*para hacer recursivamente.
Reid
@Reid: voy a probar eso. Buen hallazgo
0xC0000022L
Buena, @Gilles. Aprendí eso de los viejos sistemas DEC que no podían tener acceso a / usr o / bin en ciertas condiciones de arranque y los scripts de arranque necesarios para que las funciones 'cat' y 'ls' fueran propias.
Arcege
1
bueno, primero aprendí sobre echo * de ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

Menos TAB TAB

El interruptor find -ls es independiente de / bin / ls y tiene su propio formato, y muestra información detallada:

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

otro, detalles que muestran posibilidad, es 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
usuario desconocido
fuente
10

Para que parezca ls, usaría el forbucle de Bash :

for i in *; do echo $i; done

Si eso no funciona, probaría Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Licuadora
fuente
import glob; print '\n'.join(glob.glob('/home/*'))funcionaría igual de bien.
Arcege
6

Good ol 'vim;) (con clasificación, navegación, etc.)

vim .
gorsky
fuente
6
find .

Aunque es probable que desee ingresar los parámetros limitantes que necesita.

Pato
fuente
3

lsattr ./*

getfacl ./* también mostrará permisos

grep -l '.*' ./*

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

debugfs /dev/sdX reemplace sdX con cualquier partición en la que desee hacer un ls, luego puede hacerlo dentro de 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 suponiendo que tenga instalado el comandante de medianoche

Mark McKinstry
fuente
3

Similar a la echoversión, pero imprime una entrada por línea para una mayor legibilidad:

printf %s\\n ./*

o

printf '%s\n' ./*

Recursivamente (para bash 4+; otros shells necesitan una opción diferente para configurarlo o tienen globstar habilitado por defecto):

shopt -s globstar
printf %s\\n ./**/*
maldad
fuente
No es necesario el '/ *', un simple se **repetirá en todos los directorios si globstarestá configurado. Solo cambia a printf '%s' **.
2

¿Qué tal el dircomando? :)

/bin/dir

torre
fuente
1

Bueno, si no pudiera usar ls en el modo shell de emacs, podría cambiar al modo eshell o simplemente a un dired.

Jerry Asher
fuente
1

Si tengo bash shell iniciado (o cualquier otro shell con finalización), probablemente solo escriba '*' y luego tab.

O como usualmente tengo X comenzado, también puedo hacer 'nautilus', pero está bien para los humanos.

También puedo probar / usr / bin / lsattr

Pero en el mundo real, lo que realmente haría si me ocurriera algo así sería:

sudo apt-get install --reinstall coreutils
kriss
fuente
1

En bash, o un shell con finalización de pestañas similar, no necesita usar un comando real: wibbleseguido de dos pestañas obtendrá una lista de archivos en el directorio actual, y wibble /bin/seguido de dos pestañas le mostrará lo que hay a la izquierda de / bin. Una vez me encontré en esta situación (en realidad, maté / bin por completo junto con algunas otras cosas), y comencé a usar el echo *enfoque sugerido por @STATUS_ACCESS_DENIED, pero finalmente encontré la finalización de pestañas más conveniente.

Gordon Davisson
fuente
0

De otra manera tree, no mencionada aquí, va de forma recursiva y, a diferencia de find o ls no tiene ningún error (como:) Permission denied, Not a directorytambién obtiene la ruta absoluta en caso de que desee alimentar los archivos xargsu otro comando

tree -fai /pathYouWantToList >listOfFiles.list

las opciones que significan:

-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.
Eduard Florinescu
fuente