• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Tar-Archiv packen mit geänderten Dateien

andy0009

Newbie
Hallo,

ich möchte ein tar-Archiv aus einem Verzeichnis (mit Dateien auch in weiteren Unterverzeichnissen) erstellen, das alle Dateien, die in den letzten 24 Stunden geändert wurden, enthält.

Damit erhalte ich alle geänderten Dateien der letzten 24 Stunden:
find . -name '*' -type f -mtime -1

Wie erstelle ich nun ein Archiv mit genau diesen Dateien?

Danke für Hinweise!

mfg
andy
 
A

Anonymous

Gast
andy0009 schrieb:
Damit erhalte ich alle geänderten Dateien der letzten 24 Stunden:
find . -name '*' -type f -mtime -1

Wie erstelle ich nun ein Archiv mit genau diesen Dateien?
In dem du diese Dateien aus dem Befehl der sie finden kann deinem tar-Befehl als Argumente bekannt gibst. zB so hier. legt Archiv test.tar an.
Code:
tar -cf test.tar $(find . -name '*' -type f -mtime -1 2>/dev/null)
Das Umlenken der Fehlerausgabe ist hier notwendig falls eventuelle Fehlermeldungen aus dem find kommen könnten, zB wegen fehlender Zugriffsrechte.
Keine Ahnung wie viele Dateien hier so mit dieser Methode an tar übergeben werden können, aber sicherlich nicht unbegrenzt viele. Je nach Datei und Verzeichnisnamenslänge wird sicherlich irgendwann die Shell aufgeben und einen Fehler wegen zu vieler Argumente oder zu langer Argumentliste bringen. Desshalb ist es besser diese Dateinamen erst in ein File zu schreiben und dieses File dann an tar zu übergeben Hier nenn ich diese Datei mal einfach "find4tar.txt"
Code:
find . -name '*' -type f -mtime -1 2>/dev/null > find4tar.txt
tar -cf test.tar -T find4tar.txt
Achtung: das tarfile das du beschreiben willst sollte in beiden Fällen hier nicht noch einmal an sich selbst zur Archivierung übergeben werden, das gibt eine Error/Warnmeldung die meist schwer zu interpretieren ist. Hier in diesem Fall würde er wohl etwa so lauten
Code:
tar: ./test.tar ist das Archiv; nicht gesichert.
und bedeutet sowiel wie "Die Datei wurde bei der Sicherung übersprungen, weil es das Archiv selbst ist."
Um das zu umgehen am Besten das Tarfile in einem anderem Verzeichnis anlegen, in dem find nicht sucht, oder es bei der Suche gezielt ausschließen.

Solltest du irgendwelche nicht ganz so schöne Sonderzeichen in Verzeichniss- und Dateiennamen haben, Leerzeichen, Zeilensprünge, und dergleichen mehr, dann solltest du besser noch einen Schritt weitergehen und "NULL-Separierte" Daten an tar übergeben.
Code:
find . -name '*' -type f -ctime -1  -print0 2>/dev/null > find4tar.txt
tar -cf test.tar --null -T find4tar.txt

robi
 
Oben