Linux - commande pour lister les fichiers (sauf ls)

27

Imaginez que vous travailliez sur un système et que quelqu'un a accidentellement supprimé la lscommande ( /bin/ls). Comment pouvez-vous obtenir une liste des fichiers dans le répertoire actuel? Essayez-le.

J'ai essayé de nombreuses méthodes et j'ai aussi cherché sur Internet mais rien. Je veux demander à côté de la lscommande quelle commande pouvons-nous utiliser pour répertorier tous les fichiers.

Eduard Florinescu
la source

Réponses:

35
echo *

... affichera les fichiers dans le dossier en cours via la globalisation de fichiers sur des shells compatibles Bourne

Cela répertorie tous les fichiers d'un niveau:

echo */*

Dans Bash, si globstar est défini (défini avec shopt -s globstar, non défini avec shopt -u globstar), cela répertoriera tous les fichiers de manière récursive:

echo **
0xC0000022L
la source
10
Au-delà de l'exercice des devoirs, echo *est utile dans la pratique, lorsque vous avez foiré votre système afin de ne pouvoir exécuter aucun programme (par exemple, vous avez supprimé libc.soou ld.so), mais vous avez toujours un shell en cours d'exécution.
Gilles 'SO- arrête d'être méchant'
3
Dans bash4 (je pense) et zsh, vous pouvez aussi le echo **/*faire récursivement.
Reid
@Reid: va tester ça. Belle trouvaille.
0xC0000022L
Bien, @Gilles. A appris que des anciens systèmes DEC qui ne pouvaient pas avoir accès à / usr ou / bin dans certaines conditions de démarrage et des scripts de démarrage nécessaires pour créer les fonctions «cat» et «ls» eux-mêmes.
Arcege
1
agréable, j'ai d'abord entendu
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

Moins TAB TAB

trouve le commutateur -ls est indépendant de / bin / ls et a son propre format, et affiche des informations détaillées:

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 autre, les détails montrant la possibilité, est 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
Utilisateur inconnu
la source
10

Pour le faire ressembler ls, j'utiliserais la forboucle de Bash :

for i in *; do echo $i; done

Si cela ne fonctionne pas, j'essaierais Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Mixeur
la source
import glob; print '\n'.join(glob.glob('/home/*'))fonctionnerait tout aussi bien.
Arcege
6

Bon vieux vim;) (avec tri, navigation, etc.)

vim .
gorsky
la source
6
find .

Bien que vous souhaitiez probablement entrer les paramètres de limitation dont vous avez besoin.

canard
la source
3

lsattr ./*

getfacl ./* affichera également les autorisations

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* fonctionne avec GNU awk

debugfs /dev/sdX remplacez sdX par la partition sur laquelle vous voulez faire un ls, alors vous pouvez ls dans 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 en supposant que vous avez installé le commandant de minuit

Mark McKinstry
la source
3

Similaire à la echoversion, mais cela imprime une entrée par ligne pour une meilleure lisibilité:

printf %s\\n ./*

ou

printf '%s\n' ./*

Récursivement (pour bash 4+; d'autres shells ont besoin d'une option différente pour le définir ou ont globstar activé par défaut):

shopt -s globstar
printf %s\\n ./**/*
evilsoup
la source
Pas besoin de '/ *', un simple **récursera dans tous les répertoires s'il globstarest défini. Changez simplement en printf '%s' **.
2

Et la dircommande? :)

/bin/dir

tour
la source
1

Eh bien, si je ne pouvais pas utiliser ls en mode shell d'emacs, je pourrais passer en mode eshell ou simplement dired.

Jerry Asher
la source
1

Si j'ai démarré le shell bash (ou tout autre shell terminé), je devrais probablement simplement taper '*' puis tab.

Ou comme j'ai l'habitude de commencer X, je peux aussi juste faire du «nautile», mais OK c'est pour les humains.

Je peux aussi essayer / usr / bin / lsattr

Mais dans le monde réel, ce que je ferais vraiment si une telle chose m'arrivait était certainement:

sudo apt-get install --reinstall coreutils
kriss
la source
1

En bash, ou un shell avec une tabulation similaire, vous n'avez pas du tout besoin d'utiliser une vraie commande: wibblesuivi de deux onglets vous obtiendrez une liste de fichiers dans le répertoire en cours, et wibble /bin/suivi de deux onglets vous montrera ce qui est à gauche de / bin. Une fois, je me suis retrouvé dans cette situation (en fait, j'avais tué / bin entièrement avec d'autres choses), et echo *j'ai commencé à utiliser l' approche suggérée par @STATUS_ACCESS_DENIED, mais j'ai finalement trouvé la complétion des onglets plus pratique.

Gordon Davisson
la source
0

Une autre façon avec tree, mentionné nulle part ici, il va récursive et trouver la différence ou ls vous n'avez pas des erreurs (comme: Permission denied, Not a directory) vous obtenez également le chemin absolu dans le cas où vous voulez nourrir les fichiers xargsou une autre commande

tree -fai /pathYouWantToList >listOfFiles.list

les options signifiant:

-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
la source