Linux - polecenie wyświetlania listy plików (oprócz ls)


27

Wyobraź sobie, że pracujesz w systemie i ktoś przypadkowo usunął lspolecenie ( /bin/ls). Jak uzyskać listę plików w bieżącym katalogu? Spróbuj.

Próbowałem wielu metod, a także szukałem w Internecie, ale nic. Chcę zapytać obok lspolecenia, którego polecenia możemy użyć, aby wyświetlić listę wszystkich plików.

Odpowiedzi:


35
echo *

... pokaże pliki w bieżącym folderze poprzez globbing plików w powłokach zgodnych z Bourne.

Spowoduje to wyświetlenie listy wszystkich plików o jeden poziom niżej:

echo */*

W Bash, jeśli globstar jest ustawiony (ustawiony za pomocą shopt -s globstar, wyłączony za pomocą shopt -u globstar), to wyświetli listę wszystkich plików rekurencyjnie:

echo **

10
Poza ćwiczeniami domowymi echo *jest przydatny w praktyce, kiedy spieprzyłeś swój system, abyś nie mógł wykonać żadnego programu (np. Usunąłeś libc.solub ld.so), ale nadal masz działającą powłokę.
Gilles „SO- przestań być zły”

3
W bash4 (tak mi się wydaje) i zsh możesz także użyć echo **/*tego rekurencyjnie.
Reid

@Reid: to przetestuję. Niezłe znalezisko.
0xC0000022L

Dobry, @Gilles. Nauczyłem się tego ze starych systemów DEC, które nie mogły mieć dostępu do katalogu / usr lub / bin w określonych warunkach rozruchu i skryptów rozruchowych potrzebnych do samodzielnego wykonania funkcji „cat” i „ls”.
Arcege

1
fajnie, po raz pierwszy dowiedziałem się o echu * od ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry

23
find -maxdepth 1 
find -maxdepth 1 -ls

mniej TAB TAB

przełącznik find -ls jest niezależny od / bin / ls i ma swój własny format oraz wyświetla szczegółowe informacje:

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

innym, szczegółami wskazującymi na możliwość, jest 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

Aby to wyglądało ls, użyłbym forpętli Basha :

for i in *; do echo $i; done

Jeśli to nie zadziała, wypróbuję Python ;):

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

import glob; print '\n'.join(glob.glob('/home/*'))działałoby równie dobrze.
Arcege


6
find .

Chociaż prawdopodobnie chcesz wprowadzić dowolne parametry ograniczające, których potrzebujesz.


3

lsattr ./*

getfacl ./* wyświetli również uprawnienia

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* współpracuje z GNU awk

debugfs /dev/sdX zamień sdX na dowolną partycję, na której chcesz zrobić ls, wtedy możesz ls wewnątrz 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 zakładając, że masz zainstalowany dowódca północy


3

Podobne do echowersji, ale drukuje jeden wpis w wierszu dla większej czytelności:

printf %s\\n ./*

lub

printf '%s\n' ./*

Rekurencyjnie (dla bash 4+; inne powłoki albo potrzebują innej opcji, aby to ustawić, albo domyślnie mają włączoną globstar):

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

Nie ma potrzeby używania **znaku „/ *”, proste powróci do wszystkich katalogów, jeśli globstarjest ustawione. Po prostu zmień na printf '%s' **.


1

Cóż, gdybym nie mógł użyć ls w trybie powłoki emacsa, mógłbym przejść do trybu eshell lub po prostu dired.


1

Jeśli mam uruchomioną powłokę bash (lub dowolną inną powłokę z ukończeniem), prawdopodobnie po prostu wpisałbym „*”, a następnie tab.

Lub, jak zwykle mam X, mogę również zrobić „nautilus”, ale OK, to jest dla ludzi.

Mogę także wypróbować / usr / bin / lsattr

Ale w prawdziwym świecie to, co naprawdę zrobiłbym, gdyby coś takiego mi się wydarzyło, to na pewno:

sudo apt-get install --reinstall coreutils

1

W bash lub powłoce z podobnym uzupełnianiem tabulatorów nie musisz wcale używać prawdziwego polecenia: wibblepo dwóch kartach pojawi się lista plików w bieżącym katalogu, a wibble /bin/po dwóch kartach pokaże ci się na lewo od / bin. Kiedyś znalazłem się w tej sytuacji (właściwie zabiłem / bin całkowicie wraz z kilkoma innymi rzeczami) i zacząłem stosować echo *podejście sugerowane przez @STATUS_ACCESS_DENIED, ale ostatecznie uznałem, że uzupełnianie tabulacji jest wygodniejsze.


0

Innym sposobem z tree, niewymienione nigdzie tutaj, to idzie rekurencyjnie iw przeciwieństwie do znalezienia lub ls nie masz żadnych błędów (takich jak: Permission denied, Not a directory) można również uzyskać bezwzględną ścieżkę w przypadku, gdy chcesz karmić plików xargslub innych poleceń

tree -fai /pathYouWantToList >listOfFiles.list

opcje oznaczają:

-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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.