Pokaż tylko ukryte pliki (pliki kropek) w aliasie ls

42

Używam polecenia

ls -a | grep '^\.'

do pokazywania tylko ukrytych plików. Dodałem linię

alias hidden='ls -a | grep '^\.'' # show only hidden files

do .bash_aliasespliku

ale to nie działa. To prawdopodobnie problem z 'charakterem.

Czy możesz mi pomóc napisać prawidłowy alias?

xralf
źródło
z przykładami, które są jeszcze bardziej złożone, bardzo rzadko trzeba przechodzić z pojedynczych na podwójne cudzysłowy. Można to zrobić po prostu łącząc cytaty ze sobą. W tym przykładzie byłoby to 'ls -a | grep '"'"'^\.'"'"'Wygląda okropnie (i w tym przykładzie jest zupełnie niepotrzebne, ponieważ możesz po prostu zamienić podwójne cudzysłowy dla każdej z par), ale w bardzo rzadkich przypadkach jest to przydatne. Możesz także chcieć -Cflagi (wymuś wyjście z wielu kolumn). Zobacz to zdjęcie imgur.com/a/VIVFP
Dylan

Odpowiedzi:

26

Albo utwórz wewnętrzną parę cudzysłowów:

alias hidden='ls -a | grep "^\."'

Lub wykonaj zewnętrzną parę cytatów podwójnymi cudzysłowami:

alias hidden="ls -a | grep '^\.'"

Lub zrób wszystkie cytaty podwójnymi cudzysłowami i unikaj wewnętrznej pary:

alias hidden="ls -a | grep \"^\.\""

Lub uczyń go funkcją, abyś mógł przekazać kilka argumentów podczas wywoływania:

hidden() { ls -a "$@" | grep '^\.'; }
człowiek w pracy
źródło
90

Niech powłoka wyświetli listę plików kropek i powie, lsaby nie przeglądać katalogów:

ls -d .*
Gilles „SO- przestań być zły”
źródło
6
Ma to tę zaletę, że pozwala na wyświetlanie wielu kolumn, w przeciwieństwie do greppodejścia opartego na bazach.
anol
Pokazuje jednak również katalogi (jak wspomniano). Czy jest jakiś sposób na uproszczenie i wyświetlanie tylko plików?
honzajde,
@honzajde Pytanie nie wymagało wykluczenia katalogów. Jeśli chcesz wykluczyć katalogi, możesz użyć ls -d .* | grep -v '^d'lub (tylko zsh)print -lr .*(.)
Gilles 'SO - przestań być zły'
to nie działa dla mnie na Ubuntu 16.04
Andrew_1510
9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

LUB

Aby utworzyć alias tego samego:

alias lh='ls -Ad .*'

LUB

To samo można zrobić za pomocą polecenia grep i operatora potoku; jednak straciłby kolor i formatowanie:

ls -a|grep "^\." 

LUB

Przez alias:

alias lh='ls -a|grep "^\."'
Książę Bhanwra
źródło
4

Możesz użyć podwójnych cudzysłowów:

alias hidden="ls -a | grep '^\.'"

lub łącz więcej łańcuchów pojedynczych cudzysłowów

alias hidden='ls -a | grep '\''^\.'\'

lub usuń wszystkie wewnętrzne cytaty

alias hidden='ls -a | grep ^\\.'
enzotib
źródło
2

Dla przypomnienia, to wydaje się nie działać ze mną, ponieważ ls -adrukuje dwie (czasem więcej kolumn). Polecam użycie tej -1opcji, aby upewnić się, że każdy plik ma swoją własną linię. Coś takiego:

alias hidden='ls -a1 | grep "^\."'
rahmu
źródło
Właśnie wypróbowałem, ls -a | catże nadal wyświetla na 2 kolumnach. Powinienem wspomnieć, że używam Solaris, a nie GNU. Może to dlatego. We wszystkich przypadkach Twoje -1rozwiązanie działało idealnie i jest znacznie bardziej eleganckie niż moje hackerskie obejście. Aktualizuję swoją odpowiedź.
rahmu
Prawdopodobnie przegapiłem tę dyskusję, ale spójrz tutaj, jeśli coś pójdzie nie tak.
xralf
1

Sprawia to, że jest nieco bardziej skomplikowany, ale unika się parsowanials .

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

Funkcja dwóch powłok posłuży finddo wygenerowania listy wszystkich ukrytych zwykłych plików w bieżącym katalogu lub w katalogu podanym w wierszu poleceń.

llshFunkcja wygenerować „długie wystawianie”, która jest tylko nieco więcej informacji, niż ls -l, gdy lshwytwarza się wymieniając jak jednokolumnowy ls -1.

Kusalananda
źródło
0
find . -type f -name ".*"

LUB

find . -type f -name ".*" | while read file; do basename $file; done
kemiko
źródło
Cześć! Możesz poprawić swoją odpowiedź, wyjaśniając szczegółowo, jak to działa, a także wskazując, dlaczego Twoim zdaniem odpowiada na pytanie.
dhag
0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }
Akhil J
źródło
-1

Czy twoje lswsparcie -A? Od man ls:

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.
waltinator
źródło
Tak, ale chciałem onlyukrytych plików.
xralf
ls -A -1 -d -F .* | egrep -v '/$'
waltinator
-3

Wystarczy wpisać poniższe polecenie i nie mylić z powyższymi wyjaśnieniami.

ls -A -1 -d -F .* | egrep -v '/$'
srinath
źródło
Myślę, że OP poprosił o jak poprawnie napisać alias.
kontr-
1
To tylko kopia komentarza waltinatora na jego / jej odpowiedź. Aby ta odpowiedź była przydatna, musisz wyjaśnić, w jaki sposób i dlaczego te poszczególne lsflagi i egreppolecenie odpowiadają na pytanie.
Anthony G - sprawiedliwość dla Moniki
-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"
shailesh Chanderiya
źródło
2
Czy możesz wyjaśnić swoją odpowiedź, jedna linia kodu nie jest liczona jako dobra odpowiedź
Romeo Ninov
zgodnie z wymaganiami musi wymienić tylko ukryte pliki. więc mam listę wszystkich plików, w tym ukrytych plików przez ls -lart. następnie używam wyrażenia regularnego, aby pokazać, że pliki zaczynają się od kropki (.). Mam taki outout.
shailesh Chanderiya
[g906016 @ hklu2574881: [PTA] ~] $ ls -lart | sed -n "/ \. [A-Za-z0-9] [A-Za-z0-9] * / p" -rw-r - r-- 1 g906016 g906016 658 29 grudnia 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 29 grudnia 2016 r .kshrc -rw ------- 1 g906016 g906016 27 grudnia 29 2016 .k5login -rw-r - r-- 1 g906016 g906016 176 29 grudnia 2016 r. bash_profile -rw-R - r-- 1 g906016 g906016 18 29 grudnia 2016 .bash_logout -rwxr-XR-X1 g906016 g906016 0 29 grudnia 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 29 grudnia 2016 .subversion
shailesh Chanderiya