Ich habe diese sehr einfache Linie in einem Bash - Skript , das erfolgreich ausführt (dh die Erzeugung _data.tar
Datei), mit der Ausnahme , dass es nicht der Fall ist , die Unterverzeichnisse ausschließen es gesagt wird über die ausschließen --exclude
Option:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Stattdessen wird eine _data.tar
Datei erstellt, die alles unter / data enthält, einschließlich der Dateien in den Unterverzeichnissen, die ich ausschließen wollte.
Irgendeine Idee warum? und wie kann man das beheben?
Update Ich habe meine Beobachtungen basierend auf dem Link implementiert, der in der ersten Antwort unten angegeben ist (oberste Ebene zuerst, kein Leerzeichen nach dem letzten Ausschluss):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Aber das hat nicht geholfen. Alle "ausgeschlossenen" Unterverzeichnisse sind in der resultierenden _data.tar
Datei vorhanden.
Das ist rätselhaft. Egal, ob dies ein Fehler in aktuellem tar (GNU tar 1.23, unter CentOS 6.2, Linux 2.6.32) oder eine "extreme Empfindlichkeit" von tar gegenüber Leerzeichen und anderen leicht zu übersehenden Tippfehlern ist, ich halte dies für einen Fehler. Zur Zeit.
Das ist schrecklich : Ich habe die unten vorgeschlagene Einsicht ausprobiert (kein Nachstellen /*
) und es funktioniert immer noch nicht im Produktionsskript:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Ich sehe keinen Unterschied zwischen dem, was ich versucht habe und dem, was @ Richard Perrin versucht hat, mit Ausnahme der Anführungszeichen und 2 Leerzeichen anstelle von 1. Ich werde dies versuchen (muss warten, bis das nächtliche Skript als zu sicherndes Verzeichnis ausgeführt wird) up is huge) und melde dich zurück.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Ich beginne zu denken, dass all diese tar --exclude
Empfindlichkeiten nicht Teer sind, sondern etwas in meiner Umgebung, aber was könnte das dann sein?
Es funktionierte! Die letzte --exclude
getestete Variante (keine einfachen Anführungszeichen und ein Leerzeichen anstelle eines doppelten Leerzeichens zwischen den s) funktioniert. Seltsam, aber akzeptierend.
Nicht zu fassen! Es stellt sich heraus, dass eine ältere Version von tar
(1.15.1) nur ausschließen würde, wenn sich das oberste Verzeichnis zuletzt in der Befehlszeile befindet. Dies ist genau das Gegenteil von der Version 1.23. Zu Ihrer Information.