Ich habe es versucht, ls /etc/[ac]*
aber es zeigt Verzeichnisse, die mit a oder c beginnen , und deren gesamten Inhalt, nicht die Dateien, die mit " a " oder " c " beginnen.
Ich habe es versucht, ls /etc/[ac]*
aber es zeigt Verzeichnisse, die mit a oder c beginnen , und deren gesamten Inhalt, nicht die Dateien, die mit " a " oder " c " beginnen.
Antworten:
Um zu vermeiden, dass der Inhalt von Verzeichnissen aufgelistet wird, können Sie:
ls -d /etc/[ac]*
Das wird die Verzeichnis - Liste Namen zusammen mit gewöhnlichen Dateinamen beginnend mit a
oder c
.
Der Vollständigkeit halber find
könnte eine Lösung ohne Einbeziehung sein:
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
ls -d
schien ebenfalls angemessen, aber es scheint, dass die ursprüngliche Frage angibt, dass keine Verzeichnisse aufgelistet werden sollten, unabhängig von der Erweiterung oder Nichterweiterung.
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
nicht analysieren ls
.
ls
meiner Meinung nach ein faires Spiel.
/etc
sehr wahrscheinlich vernünftig sind, wird ein einfaches Leerzeichen den ls
Ansatz unterbrechen, da sich die Feldnummern ändern. +1 für ls -ld
obwohl.
LC_ALL=C
) korrigieren. Es ist nicht garantiert, dass das Datum 3 Felder in anderen Gebietsschemas enthält.
Rekursiv:
find /etc -type f -name '[ac]*'
Wenn Sie keine Rekursion benötigen, können Sie dies portabel tun:
find /etc/. ! -name . -prune -type f -name '[ac]*'
Oder dies nicht portabel (GNU oder ein aktueller BSD-Fund):
find /etc -type f -maxdepth 1 -name '[ac]*'
Wenn Sie diesen Fall unempfindlich ausführen möchten, verwenden Sie -iname
anstelle von -name
.
-type f
für reguläre Dateien gilt . Wenn Sie stattdessen Nicht-Verzeichnisdateien benötigen, ersetzen Sie diese durch ! -type d
(oder ! -xtype d
durch GNU, find
wenn Sie auch Symlinks zu Verzeichnissen ausschließen möchten).
Sie können diesen Befehl auch versuchen,
for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'
Wenn Sie sowohl Directorys (nicht den Inhalt des Verzeichnisses) als auch Dateien möchten, können Sie printf
bultin verwenden:
printf "%s\n" [ac]*
Beispiel:
$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt
Mit zsh
:
print -rl /etc/[ac]*(.)
Würde die regulären Dateien (wie in -type f
in find
) auflisten, in /etc
deren Namen mit a
oder beginnt c
. Der (xxx)
Teil am Ende eines Globs ist eine zsh-spezifische Funktion, die als Globbing-Qualifizierer bezeichnet wird. .
als globbing qualifier bedeutet reguläre datei .
Wenn der Glob nicht übereinstimmt, zsh
wird der Befehl abgebrochen . Beachten Sie, dass in anderen Bourne-ähnlichen Shells das Muster zu sich selbst erweitert wird, wenn der Glob nicht übereinstimmt, sodass ls -d /etc/[ac]*
eine aufgerufene Datei möglicherweise falsch aufgelistet wird, /etc/[ac]*
wenn keine Datei mit a
oder c
in beginnt /etc
.
print -rl /etc/[ac]*(^/)
würde die Dateien auflisten, die nicht vom Typ Verzeichnis und sind
print -rl /etc/[ac]*(-^/)
würde die Dateien auflisten, die nach dem Auflösen von Symlinks nicht vom Typ Verzeichnis sind.