Was ist der einfachste Weg, über die Befehlszeile den Inhalt mehrerer Dateien anzuzeigen? Mein Verzeichnis sieht wie folgt aus.
./WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b
./xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM
./GZnATXO1e5Hh3Bz1bhgJjjwheIjjZqtnXR0hfOyj
./mWz7ehBNoTZmtDh8JG6sxw2lMJFwIovPzxDGECUY
./JN65F5v3RL2ilHPqNSx9N9D4lvVpqpbJ9lASd8TJ
./At9PS4y4nTiXUO0Z0USnbYkTPBla1msQRpwuruqE
./YiPyMZPCaUDZTiTczAvWII9bJrUqLXCFtH2pXEA2
./JoakdlbRFPwAvWp1d4n8RvMoyMeizCoiriL2Sn2U
./wFPWZUus8Yu7UtESGABLCoqDg36cT90USO0xuyUr
./qseI9PgV1EJfZCDyGGeVytajqG7JeX0r7eA5S1JW
./zgFJpNgXyCsaVh38aCuMGuzHwIbwSNB6rQDdh27x
./.htaccess
Jetzt möchte ich den Inhalt aller Dateien außer anzeigen .htaccess
. Es könnte ungefähr so aussehen:
WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.
xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.
[...]
Ich denke, das sollte mit einer Kombination aus find, xargs und cat machbar sein, aber ich habe nicht herausgefunden, wie. Vielen Dank für Ihre Zeit!
command-line
files
Znarkus
quelle
quelle
Antworten:
Die beiden Standardbefehle
head
undtail
einen Header mit dem Dateinamen drucken , wenn Sie mehr als eine Datei Argument übergeben. Verwenden Sietail -n +1
(Drucken ab der ersten Zeile, dh alles), um die gesamte Datei zu drucken.Anscheinend möchten Sie hier alle Dateien mit Ausnahme der einzelnen sehen, deren Name mit einem Punkt beginnt. Punktdateien sind unter Unix „versteckt“: Sie werden in der Standardausgabe von
ls
oder in einer Platzhalterübereinstimmung nicht angezeigt . So wird das Abgleichen aller nicht ausgeblendeten Dateien mit nur erledigt*
.(Genau genommen wird
tail -n +1 -- *
es benötigt, wenn einer der Dateinamen mit einem-
. Beginnt .)quelle
--
Modifikator lesen kann ?--
Das Ende von Optionen zu kennzeichnen, ist eine Konvention, die die meisten Befehle befolgen. ZBtail -n +1 -- -f -g
sagttail
das-f
und-g
sind zu lesende Dateien (Operanden) und keine Optionen. Es ist Richtlinie 10 in der POSIX-Dienstprogramm-Syntaxrichtlinie (ein Dokument, das für Dienstprogrammschreiber bestimmt ist). Ich habe keinen Lesevorschlag für Endbenutzer, ich würde erwarten, dass ein gutes Unix-Tutorial ihn irgendwann behandelt.find
, aber dann einige exec mit Druck Formatierung: Eine einfache Art und Weise zu verwenden ,find
undtail
ist:find . -type f -print0 -name "*" | xargs -0 tail -n +1 --
(-print0
undxargs -0
und die--
dafür sorgen , dass der Befehl auch mit Dateinamen mit Leerzeichen oder ausgehend arbeitet mit -)Sie können alles in einem erledigen mit
find
:Das bedeutet
find
, dass alle Dateien (-type f
) im aktuellen Verzeichnis (.
) mit Ausnahme von (-not
) mit dem Namen.htaccess
(-name .htaccess
) gesucht werden sollen. Anschließend wird-printf
eine neue Zeile gefolgt vom Dateinamen (%p
) gedruckt ( ) und dann incat
der Datei (-exec cat {} \;
) ausgeführt. Das gibt Ihnen eine Ausgabe wie:Wenn Sie dies häufig tun, ist es möglicherweise sinnvoll, es in ein Shell-Skript oder eine Funktion einzufügen. Ich habe einen Namen
cats
, der genau das tut:Es durchläuft jedes Dateinamenargument, druckt den Dateinamen (in Fettdruck Grün) aus und markiert dann die Datei:
Dann wäre der Befehl einfach:
quelle
Versuchen Sie Folgendes, um den Inhalt aller Dateien im aktuellen Ordner anzuzeigen:
und ähnlich, aber rekursiv:
Das Format wäre:
filename: content
.Ein ähnliches Format wie vorgeschlagen zu haben, wäre:
Randnotizen:
\x00
) in den obigen Beispielen verhindert die Anzeige von Binärdateien (was-I
tatsächlich funktioniert, aber wir müssen immer noch ein Muster verwenden).*
) werden versteckte Dateien wie z.htaccess
.Siehe auch: grep: Dateiname einmal anzeigen, dann Kontext mit Zeilennummern bei Unix SE anzeigen
quelle
grep -r ^
reicht es.Sie können dies verwenden:
quelle
Wenn Sie eine Feinabstimmung vornehmen möchten und nicht zu viel Zeit mit Pipes, Finds und allem verlieren möchten (obwohl dies die leistungsstärkste Toolchain ist, die Sie jemals finden konnten)
Versuche einfach eine for-Schleife, eine Katze usw. zu benutzen.
quelle
Wenn Sie es auch rekursiv drucken möchten, verwenden Sie (zum Beispiel für Dateien mit der Erweiterung .sql):
quelle