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.

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 **

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

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/*'))"

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 .

6
find .

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


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


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 ./**/*

No es necesario el '/ *', un simple se **repetirá en todos los directorios si globstarestá configurado. Solo cambia a printf '%s' **.


1

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


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

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.


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.