Ich möchte tar und alle .php- und .html-Dateien in einem Verzeichnis und seinen Unterverzeichnissen speichern. Wenn ich benutze
tar -cf my_archive *
Es tariert alle Dateien, die ich nicht will. Wenn ich benutze
tar -cf my_archive *.php *.html
Unterverzeichnisse werden ignoriert. Wie kann ich es rekursiv tarieren lassen, aber nur zwei Dateitypen einschließen?
-o -name [pattern]
für jede neue BedingungWenn Sie
bash
Version> 4.0 verwenden, können Sie Folgendes ausnutzenshopt -s globstar
, um Folgendes zu erledigen:Dadurch werden alle .yml-Dateien, die mit Alice beginnen, aus einem beliebigen Unterverzeichnis hinzugefügt und alle .json-Dateien, die mit Bob beginnen, aus einem beliebigen Unterverzeichnis hinzugefügt.
quelle
shopt -s globstar
Option hat, so dass die Antwort korrekt ist und tatsächlich die beste istEine Methode ist:
Bei dieser Methode gibt es jedoch einige Einschränkungen:
Eine Problemumgehung könnte darin bestehen, den Inhalt des Befehls find in eine Datei auszugeben und dann die Option "-T, --files-from FILE" zum Tarieren zu verwenden.
quelle
Dies behandelt Pfade mit Leerzeichen:
quelle
Legen Sie sie in eine Datei
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
quelle
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
quelle
Verwenden Sie "find" und "grep", um den gesamten Pfad der .php- und .html-Dateien in allen Verzeichnissen und deren Unterverzeichnissen abzurufen. Übergeben Sie diese Pfadinformationen dann an tar, um sie zu komprimieren.
Bitte seien Sie vorsichtig mit den Symbolen "und". Beachten Sie auch, dass dies im Gegensatz zu einigen anderen Antworten die Grenze für die Anzahl der Zeichen überschreitet, die Ihre Shell in der Befehlszeile zulässt.
quelle