it-swarm.com.de

Wie tariere ich bestimmte Dateitypen in allen Unterverzeichnissen?

Ich möchte tar und alle .php- und .html-Dateien in einem Verzeichnis und seinen Unterverzeichnissen. Wenn ich benutze

tar -cf my_archive *

es tariert alle Dateien, die ich nicht will. Wenn ich benutze

tar -cf my_archive *.php *.html

es ignoriert Unterverzeichnisse. Wie kann ich es rekursiv tarieren, aber nur zwei Dateitypen einschließen?

65
user1566515

find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -

112
DeeDee

Eine Methode ist:

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

Es gibt jedoch einige Einschränkungen bei dieser Methode:

  1. Es schlägt fehl, wenn Dateien oder Verzeichnisse mit Leerzeichen enthalten sind
  2. es schlägt fehl, wenn so viele Dateien vorhanden sind, dass die maximale Befehlszeilenlänge voll ist.

Eine Problemumgehung könnte darin bestehen, den Inhalt des Befehls find in eine Datei auszugeben und dann die Option "-T, --files-from FILE" für tar zu verwenden.

9
Robin Sheat

Um mehrere Dateien mit unterschiedlichen Mustern zu komprimieren, könnten wir sie durch Leerzeichen trennen und sie alle wie folgt zur gz-Datei hinzufügen:

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

dadurch werden alle .yml-Dateien, die mit Alice beginnen, aus einem beliebigen Unterverzeichnis und alle .json-Dateien, die mit Bob beginnen, aus einem beliebigen Unterverzeichnis hinzugefügt.

4
Sairam Krish

Legen Sie sie in eine Datei

find . \( -name "*.php" -o -name "*.html" \) -print > files.txt

Verwenden Sie dann die Datei als Eingabe für tar. Verwenden Sie -I oder -T, je nachdem, welche Version von tar Sie verwenden

Verwenden Sie h, um symbolische Links zu kopieren

tar cfh my.tar -I files.txt 
0
Noam Geffen

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz

für Multicore oder nur für einen Kern:

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz

0

Dies behandelt Pfade mit Leerzeichen:

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
0