Ich habe Tausende von unl-Dateien mit dem Namen so etwas cbs_cdr_vou_20180624_603_126_239457.unl
. Ich wollte alle Zeilen aus diesen Dateien mit dem folgenden Befehl drucken. aber es gibt mir nur Dateinamen. Ich brauche keine Dateinamen, ich brauche nur Inhalte aus diesen Dateien.
find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt
Aktueller Output:
./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl
Erwartete Ausgabe:
8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;
Bitte beachten Sie, dass für den Befehl cat eine Fehlermeldung angezeigt wird -bash: /bin/logger: Argument list too long
, weshalb ich find
anstelle des cat
Befehls verwenden wollte.
cat
.Antworten:
Das
find
Dienstprogramm befasst sich mit Pfadnamen. Wenn imfind
Befehl für die gefundenen Pfadnamen keine bestimmte Aktion angegeben ist, werden sie standardmäßig ausgegeben.Sie können eine Aktion für die gefundenen Pfadnamen ausführen, z. B. Ausführen
cat
, indem Sie-exec
demfind
Befehl Folgendes hinzufügen :Dies würde alle regulären Dateien im oder unter dem aktuellen Verzeichnis finden, deren Namen mit dem angegebenen Muster übereinstimmen. Für so große Stapel wie möglich
cat
würde aufgerufen, den Inhalt der Dateien zu verketten.Die Ausgabe würde zu gehen
/home/fifa/cbs/test.txt
.Verbunden:
quelle
Die Ausgabe von
find
ergibt die entsprechenden Dateinamen.Sie können
|
die Ausgabe, anxargs cat
die dercat
Befehl für jede Datei ausgeführt wird, weiterleiten ( ) .z.B:
Eine weitere Option ist die Verwendung
-exec cat
quelle
-exec cat {} \;
und-exec -cat {} +
. Übrigens, vielen Dank Yaron.find -print0 | xargs -0
ist nicht anfällig für Leerzeichen / Anführungszeichen / etc.-exec cat {} \;
cat für jede Datei separat aus, anstatt sie wie xargs zu stapeln. Verwenden Sie es nur, wenn Sie dies ausdrücklich möchten (z. B. einen Befehl, der jeweils nur für eine Datei funktioniert) oder wenn Sie eine Portabilität auf ein System ohne-exec ... +
und ohne-print0
/ benötigenxargs -0
. Ich bin ein bisschen überrascht, dassfind|xargs
das messbar langsamer ist als-exec cat {} +
. Haben Sie nur sehr wenige Dateien insgesamt, sodass der Startaufwand einen großen Teil der Kosten ausmacht? Oder haben Sie diexargs
Version nur zeitlich festgelegt, während Ihr Festplatten-Cache kalt war?