Jak sprawić, by ls wyświetlał tylko pliki?

24

Myślę, że musi istnieć sposób, aby ls wyświetlał tylko nie-katalogi, ale strona podręcznika nie czyni tego oczywistym

myśli binarnie
źródło
Nie jestem pewien ls, ale łatwo można zrobić z filepoleceniem: file /directory/containing/the/files -maxdepth 1 -not -type d.
Henning Kockerbeck,
1
Innym sposobem byłoby filtrowanie wyjścia lsprzez grepcoś w rodzaju ls -1F /directory/containing/the/files | grep -vE /$. Należy jednak pamiętać, że analizowanie wyniku ls może być trudne .
Henning Kockerbeck,

Odpowiedzi:

37
ls -p | grep -v /

Korzystanie ls -pnakazuje lsdołączyć ukośnik do wpisów, które są katalogiem i używając grep -v /mówi grepwrócić tylko linie nie zawierające ukośnik.

thomasrutter
źródło
Sprawdziłem tę, ponieważ jest to moja ulubiona odpowiedź (podczas gdy ja głosowałem za nimi wszystkimi), ale teraz próbuję znaleźć sposób na umieszczenie jej w kolumnach i odwrócenie kolejności danych wyjściowych ...
thinksinbinary
„Możesz użyć 1 przełącznika do listy pojedynczych kolumn” przepraszam, próbowałem dowiedzieć się, co masz na myśli, doceniłbym i przykład / wyjaśnienie, jeśli tak, wiem tylko, co to jest przełącznik w odniesieniu do programowania w języku C
thinksinbinary
@sdkks Nie potrzebujesz 1przełącznika podczas przesyłania danych wyjściowych, ponieważ w tej sytuacji domyślnie będzie to jedna kolumna. Jeśli o to ci chodziło.
thomasrutter
@ thinksinbinary nie wiem, jak zrobić to wielokolumnowy, ale możesz wyszukać lub zadać własne pytanie, a ktoś będzie wiedział.
thomasrutter
7

Możesz spróbować:

find . -maxdepth 1 -not -type d

I zamapuj to na specjalny alias.

Ale jeśli naprawdę chcesz używać lspolecenia, tutaj:

ls -p | egrep -v /$

theabhinavdas
źródło
6

Alternatywnie:

ls -lAh | grep -v '^d'

Ta metoda wymienia w

  • -l Format długiej listy
  • -A Wyświetla prawie wszystkie (pokaż ukryte pliki, ale nie pokazuj .i ..)
  • -h Rozmiary plików czytelne dla człowieka

podczas grep

  • -v Nie pokazuj pasujących rekordów
  • Regular expressionfiltr ^d- te zaczynają się na literę d (dla katalogu), tjdrwxrwxr-x <some file details> <foldername>

Jeśli nie chcesz za każdym razem pisać, możesz zrobić z niego alias swojego profilu bash / shell.

sdkks
źródło
2

Widziałem w twoim (@thinksinbinary) komentarzu do odpowiedzi @thomasrutter, że chciałbyś mieć możliwość wydrukowania ich w odwrotnej kolejności i w kolumnach. Prawdopodobnie już to wymyśliłeś lub przeprowadziłeś się, ale oto:

ls -pr | grep -v / | column
  • -p dodaje ukośnik do przodu ('/') do nazw katalogów
  • -r odwraca kolejność danych wyjściowych
  • -v pozwala grepowi wykonać odwrotne wyszukiwanie, aby wydrukować wszystko oprócz katalogów ( wszystko, co nie zawiera „/”, które tam -p )
  • kolumna umieszcza ją w kolumnach” - Captain Obvious
Levi Uzodike
źródło
1
myślę, że to fajnie, że na forum ubuntu ludzie nadal komentują i czytają twoje posty po długim czasie. Chciałem wrócić do Linuksa, aby nauczyć się montażu i systemów operacyjnych, ponieważ robienie tego w systemie Windows jest znacznie trudniejsze. Dzięki!
myśli binarnie
0
ls -F | grep -v /

Powyższe polecenie wyświetla pliki, ale zawiera dowiązania symboliczne, potoki itp. Jeśli chcesz je również wyeliminować, możesz użyć jednej z wymienionych poniżej flag.

ls -Fdołącza symbole do nazw plików. Te symbole pokazują przydatne informacje o plikach.

ls -F | grep -Ev '/|@|*|=|>|\|'

Powyższe polecenie wyświetla tylko pliki.

BarathVutukuri
źródło