'Tar' ist das Ergebnis eines 'Find', wobei die Verzeichnisstruktur erhalten bleibt

7

Ich möchte Teer alle die * .txt - Dateien , dass ich als Ergebnis eines bekommen find Befehl, die in einem Verzeichnis existiert eine Baumstruktur wie folgt mit:

  • Verzeichnisname
    • dir1
      • file1.pdf
      • file1.txt
    • dir2
      • file2.pdf
      • file2.txt
    • dir3
      • file3.pdf
      • file3.txt

(Die Dateinamen sind nur Beispiele).

Aber ich möchte die Verzeichnisstruktur beibehalten .

Welcher Befehl kann mir eine tar.gz- Datei mit diesem Inhalt geben?

  • dir1
    • file1.txt
  • dir2
    • file2.txt
  • dir3
    • file3.txt
Kamafeather
quelle

Antworten:

12

Sie können xargsdie Ausgabe eines Befehls als Argumente an einen anderen weiterleiten:

find . -iname '*.txt' -print0 | xargs -0 tar zcvf the_tarball.tar.gz

Beachten Sie hier, dass -print0from find und -0from xargs zusammenarbeiten, um Dateinamen korrekt abzugrenzen (damit Namen mit Leerzeichen und dergleichen kein Problem darstellen).

outlyer
quelle
6
xargs ist nicht einmal notwendig, Sie können die Ausgabe von find über stdin direkt an tar weiterleiten. Für Ihr Beispiel: Hier find . -iname '*.txt' | tar zcvf the_tarball.tar.gz --files-from -erklärt: stackoverflow.com/a/9534272/4017010 und das allgemeine Thema wurde bereits hier besprochen: unix.stackexchange.com/questions/5641/…
doktor5000
Hallo, das hat perfekt funktioniert. Und danke doktor5000 für die Präzision :)
Kamafeather