ubuntuusers.de

Unterordner mit tar archivieren

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

kutscher

Anmeldungsdatum:
22. Oktober 2006

Beiträge: 119

Hallo

Ich möchte jeden Unterordner im Ordner Dokumente einzeln mit tar erstellen und unter ~/backup speichern. Dies sollte so funktionieren das ich keinen Unterordner Namen angeben muss. Im Backup Ordner sollte sich dann jeweils der Unterordnername.tar befinden.

Danke für die Hilfe

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Kannst Du mal etwas mehr Details preisgeben? Geht es um eine beliebig tief geschachtelte Hierarchie? Willst Du pro Unterverzeichnis ein tar erstellen, das alle Dateien enthält, die direkt in diesem Verzeichnis liegen?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Mal ein erster Versuch:

find ~/Dokumente -mindepth 1 -maxdepth 1 -exec bash -c 'tar cfz "$HOME/backup/$(basename "{}").tar.gz" "{}"' \;

kutscher

(Themenstarter)

Anmeldungsdatum:
22. Oktober 2006

Beiträge: 119

Hallo

Ja, ich möchte pro Unterverzeichnis mit allem was sich drin befindet ein tar erstellen.

@Doc_Symbiosis Das funktioniert soweit, allerdings möchte ich nicht die Herkunft Hierarchie, sondern nur den Ordner. Ich hoffe das ist verständlich.

Danke für eure Hilfe

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

kutscher schrieb:

Ja, ich möchte pro Unterverzeichnis mit allem was sich drin befindet ein tar erstellen.

Also, Du willst ein separates Archiv für jeden Ordner, der sich in einem Ordner befindet.

@Doc_Symbiosis Das funktioniert soweit, allerdings möchte ich nicht die Herkunft Hierarchie, sondern nur den Ordner. Ich hoffe das ist verständlich.

Irgendwie nicht. Der Vorschlag nutzt doch nur den Basisnamen (also den Namen des Ordners). Wo siehst Du da die Hierarchie?

Mit dem, was wir jetzt wissen / zu wissen glauben, würde ich das ohne find machen:

1
2
3
4
5
for d in */; do
  d="${d%/}"
  dn="${d##*/}"
  tar czf "$HOME/backup/$dn.tgz" "$d"
done

kutscher

(Themenstarter)

Anmeldungsdatum:
22. Oktober 2006

Beiträge: 119

@rklm

Danke, so passt es 👍

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

Vielleicht habe ich noch nicht genug Kaffee intus, aber unter welchen Umständen sind denn $d und $dn jemals unterschiedlich?

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 138

Marc_BlackJack_Rintsch schrieb:

Vielleicht habe ich noch nicht genug Kaffee intus, aber unter welchen Umständen sind denn $d und $dn jemals unterschiedlich?

Du musst ja den rechten / erst entfernen damit der Ordnername beim Belegen von dn nicht "verschluckt" wird. Man könnte aber auch einfach basename zur Hilfe nehmen:

1
2
3
4
5
#!/bin/bash

for d in */; do
 tar -czf "$HOME/backup/$(basename "$d").tar.gz" "$d"
done

Gruß

Carsten

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Marc_BlackJack_Rintsch schrieb:

Vielleicht habe ich noch nicht genug Kaffee intus, aber unter welchen Umständen sind denn $d und $dn jemals unterschiedlich?

Wenn Du z.B. beim Globben in der for-Schleife einen Pfad voranstellst.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@CarstenHa Ja das ist klar, das war nicht die Frage.

@rklm Ich meinte natürlich im konkreten Code so wie er da steht. Das man den ändern kann damit das tatsächlich nötig ist was da mit $dn gemacht wird, war mir schon klar. 😉

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Marc_BlackJack_Rintsch schrieb:

@rklm Ich meinte natürlich im konkreten Code so wie er da steht. Das man den ändern kann damit das tatsächlich nötig ist was da mit $dn gemacht wird, war mir schon klar. 😉

Ich würde da auch absolute Pfade verwenden, weil man mit einem relativen Pfad wie gezeigt die Ausführung des Skriptes vom Verzeichnis abhängig macht, in dem man gerade mit der Shell steht. Das ist mir zu wackelig. In dem Fall braucht man dann den Code, der den Pfad abschneidet. Und dann muss man ggf. auch noch etwas ergänzen, damit das Backup-Verzeichnis selbst nicht im Backup landet. Und so weiter. Ich würde dann eher Borg verwenden als tar, weil das eine vernünftige Backup-Lösung ist.

Antworten |