Linux - Befehl zum Auflisten von Dateien (außer ls)


27

Stellen Sie sich vor, Sie arbeiten an einem System und jemand hat den lsBefehl versehentlich gelöscht ( /bin/ls). Wie können Sie eine Liste der Dateien im aktuellen Verzeichnis erhalten? Versuch es.

Ich habe viele Methoden ausprobiert und auch im Internet gesucht, aber nichts. Ich möchte neben dem lsBefehl fragen, mit welchem ​​Befehl wir alle Dateien auflisten können.

Antworten:


35
echo *

... zeigt Dateien im aktuellen Ordner durch Verschieben von Dateien auf Bourne-kompatiblen Shells an.

Dies listet alle Dateien auf einer Ebene auf:

echo */*

Wenn in Bash globstar gesetzt (gesetzt mit shopt -s globstar, nicht gesetzt mit shopt -u globstar) ist, werden alle Dateien rekursiv aufgelistet :

echo **

10
Über die Hausaufgaben hinaus echo *ist dies in der Praxis nützlich, wenn Sie Ihr System so vermasselt haben, dass Sie kein Programm ausführen können (z. B. Sie haben das Programm entfernt libc.sooder ld.so), aber Sie haben immer noch eine laufende Shell.
Gilles 'SO - hör auf, böse zu sein'

3
In bash4 (glaube ich) und zsh können Sie echo **/*dies auch rekursiv tun.
Reid

@Reid: werde das testen. Schöner Fund.
0xC0000022L

Gut, @Gilles. Wir haben erfahren, dass alte DEC-Systeme, die unter bestimmten Startbedingungen und Boot-Skripten keinen Zugriff auf / usr oder / bin haben konnten, 'cat' und 'ls' selbst funktionieren müssen.
Arcege


23
find -maxdepth 1 
find -maxdepth 1 -ls

Weniger TAB TAB

Findet den Schalter -ls unabhängig von / bin / ls, hat ein eigenes Format und zeigt detaillierte Informationen an:

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

Ein weiteres Detail, das die Möglichkeit zeigt, ist 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

Um es so aussehen zu lassen ls, würde ich die Bash- forSchleife verwenden:

for i in *; do echo $i; done

Wenn das nicht funktioniert, würde ich versuchen, Python ;):

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

import glob; print '\n'.join(glob.glob('/home/*'))würde genauso gut funktionieren.
Arcege

6

Good ol 'vim;) (mit Sortieren, Durchsuchen usw.)

vim .

6
find .

Wahrscheinlich möchten Sie jedoch die gewünschten einschränkenden Parameter eingeben.


3

lsattr ./*

getfacl ./* zeigt auch Berechtigungen an

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* arbeitet mit GNU awk

debugfs /dev/sdX Ersetzen Sie sdX durch die Partition, auf der Sie ein ls ausführen möchten. Dann können Sie ls in debugfs ausführen

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 vorausgesetzt, Sie haben Mitternachtskommandeur installiert


3

Ähnlich wie die echoVersion, druckt jedoch zur besseren Lesbarkeit einen Eintrag pro Zeile aus:

printf %s\\n ./*

oder

printf '%s\n' ./*

Rekursiv (für Bash 4+; für andere Shells ist entweder eine andere Option erforderlich oder Globstar ist standardmäßig aktiviert):

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

Das '/ *' ist **nicht erforderlich , ein einfacher Befehl wird in alle Verzeichnisse zurückgeführt, wenn globstarfestgelegt. Wechseln Sie einfach zu printf '%s' **.


1

Nun, wenn ich ls nicht im Shell-Modus von Emacs verwenden könnte, würde ich vielleicht in den Eshell-Modus oder einfach in einen Dired-Modus wechseln.


1

Wenn ich eine Bash-Shell gestartet habe (oder eine andere Shell mit Abschluss), würde ich wahrscheinlich nur '*' und dann tab eingeben.

Oder wie ich normalerweise mit X angefangen habe, kann ich auch nur 'Nautilus' machen, aber OK, das ist für Menschen.

Ich kann auch versuchen, / usr / bin / lsattr

Aber in der realen Welt wäre das, was ich wirklich tun würde , wenn mir so etwas einfallen würde, mit Sicherheit:

sudo apt-get install --reinstall coreutils

1

In bash oder einer Shell mit ähnlicher Tabulatorvervollständigung müssen Sie überhaupt keinen echten Befehl verwenden: wibbleWenn Sie auf zwei Tabulatoren klicken, wird eine Liste der Dateien im aktuellen Verzeichnis wibble /bin/angezeigt , und wenn Sie auf zwei Tabulatoren klicken, sehen Sie, was passiert links von / bin. Ich befand mich einmal in dieser Situation (eigentlich hatte ich / bin vollständig zusammen mit einigen anderen Dingen getötet) und begann mit dem vorgeschlagenen echo *Ansatz @STATUS_ACCESS_DENIED, fand aber schließlich die Tab-Vervollständigung praktischer.


0

Eine weitere Möglichkeit , mit treenicht überall hier erwähnt, es geht rekursiv und im Gegensatz zu finden oder ls Sie haben keine Fehler (wie: Permission denied, Not a directory) auch den absoluten Pfad für den Fall bekommen Sie die Dateien füttern xargsoder anderen Befehl

tree -fai /pathYouWantToList >listOfFiles.list

Die Optionen bedeuten:

-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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.