Zeige nur versteckte Dateien (Punktdateien) in ls alias


42

Ich benutze den Befehl

ls -a | grep '^\.'

zum Anzeigen nur der versteckten Dateien. Ich habe die Zeile hinzugefügt

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

zu .bash_aliasesarchivieren

aber das geht nicht. Es ist wahrscheinlich das Problem mit dem 'Charakter.

Könnten Sie mir bitte helfen, den richtigen Alias ​​zu schreiben?


Bei noch komplexeren Beispielen müssen Sie sehr selten von einfachen zu doppelten Anführungszeichen wechseln. Dies kann einfach durch Aneinanderstoßen der Anführungszeichen erreicht werden. Für dieses Beispiel wäre es das. 'ls -a | grep '"'"'^\.'"'"'Es sieht schrecklich aus (und für dieses Beispiel ist es völlig unnötig, weil Sie einfach doppelte Anführungszeichen für eines der Paare austauschen können), aber in sehr seltenen Fällen ist es nützlich. Möglicherweise möchten Sie auch ein -CFlag (Mehrspaltenausgabe erzwingen). Siehe dieses Bild imgur.com/a/VIVFP
Dylan

Antworten:


26

Machen Sie entweder das innere Anführungszeichenpaar in doppelte Anführungszeichen:

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

Oder machen Sie das äußere Paar von Anführungszeichen in doppelte Anführungszeichen:

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

Oder machen Sie alle Anführungszeichen in doppelte Anführungszeichen und verlassen Sie das innere Paar:

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

Oder machen Sie es zu einer Funktion, damit Sie beim Aufruf einige Argumente übergeben können:

hidden() { ls -a "$@" | grep '^\.'; }

90

Lassen Sie die Shell die Punktedateien auflisten und sagen Sie ls, dass Sie die Verzeichnisse nicht durchsehen sollen:

ls -d .*

6
Dies hat den Vorteil, dass im Gegensatz zum grep-basierten Ansatz eine mehrspaltige Auflistung möglich ist .
anol

Zeigt aber auch Verzeichnisse an (wie erwähnt). Wie kann man es einfach halten und nur Dateien anzeigen?
Honzajde

@honzajde Bei der Frage wurde nicht gefragt, ob Verzeichnisse ausgeschlossen werden sollen. Wenn Sie Verzeichnisse ausschließen möchten, können Sie ls -d .* | grep -v '^d'oder (nur zsh)print -lr .*(.)
Gilles 'SO - aufhören, böse

Dies funktioniert nicht für mich, auf Ubuntu 16.04
Andrew_1510

9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

ODER

So erstellen Sie einen Alias ​​desselben:

alias lh='ls -Ad .*'

ODER

Das Gleiche könnte über den Befehl grep und den Pipe-Operator geschehen. es würde jedoch die Farbe und die Formatierung verlieren:

ls -a|grep "^\." 

ODER

Via Alias:

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

4

Sie können doppelte Anführungszeichen verwenden:

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

oder verketten Sie mehrere Zeichenfolgen in Anführungszeichen

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

oder entfernen Sie alle internen Anführungszeichen

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

2

Für die Aufzeichnung scheint dies bei mir nicht zu funktionieren, da ls -azwei (manchmal mehr Spalten) gedruckt werden. Ich würde empfehlen, die -1Option zu verwenden, um sicherzustellen, dass sich jede Datei in einer eigenen Zeile befindet. Etwas wie das:

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

Ich habe gerade versucht ls -a | cates noch auf 2 Spalten auszugeben. Ich sollte erwähnen, dass ich Solaris verwende und nicht die GNU ls. Vielleicht deshalb. In allen Fällen hat Ihre -1Lösung einwandfrei funktioniert und ist viel eleganter als meine hackische Problemumgehung. Ich aktualisiere meine Antwort.
Rahmu

Ich habe diese Diskussion wahrscheinlich verpasst, aber schauen Sie hier, ob etwas schief geht.
Xralf

1

Machen Sie es etwas komplizierter, aber vermeiden Sie das Parsenls .

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

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

Die Zwei-Shell-Funktion wird verwendet find, um eine Liste aller versteckten regulären Dateien im aktuellen Verzeichnis oder in dem in der Befehlszeile angegebenen Verzeichnis zu erstellen.

Die llshFunktion erzeugt eine "lange Auflistung", die nur geringfügig ausführlicher ist als ls -l, während lsheine einspaltige Auflistung wie erzeugt wird ls -1.


0
find . -type f -name ".*"

ODER

find . -type f -name ".*" | while read file; do basename $file; done

Hallo! Sie könnten Ihre Antwort verbessern, indem Sie detailliert erklären, wie es funktioniert, und auch erwähnen, warum es Ihrer Meinung nach die Frage beantwortet.
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 {} \;
        }

-1

lsUnterstützt Ihr -A? Von 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.

Ja, aber ich wollte onlyversteckte Dateien.
Xralf

ls -A -1 -d -F .* | egrep -v '/$'
Waltinator

-3

Geben Sie einfach den folgenden Befehl ein und verwechseln Sie ihn nicht mit dem oben erläuterten.

ls -A -1 -d -F .* | egrep -v '/$'

Ich denke, das OP fragte, wie man einen Alias ​​richtig schreibt.
Gegenmodus

1
Dies ist nur eine Kopie des Kommentars des Waltinators zu seiner / ihrer Antwort. Damit diese Antwort nützlich ist, müssen Sie erklären, wie und warum diese bestimmten lsFlags und der egrepBefehl die Frage beantworten.
Anthony G - Gerechtigkeit für Monica

-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"

2
Können Sie bitte Ihre Antwort klären, eine Codezeile wird nicht als gute Antwort gezählt
Romeo Ninov

Je nach Anforderung muss er nur versteckte Dateien auflisten. Also habe ich alle Dateien inklusive versteckter Dateien von ls -lart aufgelistet. dann habe ich Regex verwendet, um die Dateien anzuzeigen, die mit Punkt (.) beginnen. Ich habe so ein Outpout.
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 Dec 29 2016 .zshrc -rw- r - r-- 1 g906016 g906016 171 29.12.2016 .kshrc -rw ------- 1 g906016 g906016 27.12.2016 .k5login -rw-r - r-- 1 g906016 g906016 176 29.12.2016. bash_profile -rw-r - r-- 1 g906016 g906016 18 Dec 29 2016 .bash_logout -rwxr-xr-x 1 g906016 g906016 0 Dec 29 2016 .dir_colors drwxr-x --- 3 g906016 g906016 4096 Dec 29 2016 .subversion
Shailesh Chanderiya
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.