Mit grep -lr-Ausgang zum hinzufügen von Dateien zu tar
In UBUNTU und CENTOS.
Ich habe einige Dateien, die ich will Teer basierend auf deren Inhalt.
$ grep -rl "123.45" .
gibt eine Liste von etwa 10 Dateien in dieser Art von format:
./somefolder/someotherfolder/somefile.txt
./anotherfolder/anotherfile.txt
etc...
Ich will tar.gz alle von Ihnen.
Habe ich versucht:
$ grep -rl "123.45" . | tar -czf files.tar.gz
Nicht funktioniert. Das ist, warum ich hier bin. Irgendwelche Ideen? Danke.
Gerade ausprobiert, und es funktionierte in Ubuntu, aber in CentOS bekomme ich "tar: 02: Cannot stat: No such file or directory".
$ tar -czf test.tar.gz `grep -rl "123.45" .`
Wenn jemand anderes hat eine bessere Art und Weise, lassen Sie es mich wissen. Oben, dass man die großen Werke in Ubuntu zumindest.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie diese:
"-T -" veranlasst tar zu Lesen Dateinamen von stdin. Weiteres minus steht für stdin. –
xargs
aufrufen tar zweimal und beim zweiten mal wird ein überschreiben der Datei, die erstellt wird, indem die erste.Tar will erzählt werden, welche Dateien zu verarbeiten, nicht die Namen der Dateien via stdin.
Es hat jedoch eine
-T
/--files-from
option. Also würde ich empfehlen, dass. Ausgabe der Liste der ausgewählten Dateien in eine temp-Datei und dann tar gelesen, dass, so wie hier:Wenn Sie möchten, können Sie auch shell-Erweiterung, um es zu tun mögen dieses:
Aber das wird fehlschlagen, wenn Sie zu viele Dateien oder wenn die Dateien haben seltsame Namen (wie z.B. das Leerzeichen, etc).
$()
syntax, Sie sind beide Formen der Befehl expansion. Es gibt ein paar kleine Unterschiede, und ich persönlich bevorzuge die$()
, aber Ihre Lösung funktioniert für die meisten Fälle. Wie ich oben erwähnte, wird es scheitern, wenn zu viele Dateien übereinstimmen oder wenn diese Dateien mit Leerzeichen im Dateinamen.tar -czf files.tar.gz -- $(grep -rl "123.45" .)
- Hinweis, ich habe den dot. Aber, gleicher Fehler. "Cannot stat: No such file or directory".