Der folgende Befehl tar schließt alle Punktdateien und Punktverzeichnisse aus.
tar -cvzf /media/bjackfly/bkup/bkup.gz --exclude '.*' --one-file-system /home/bjackfly
In meinem Fall möchte ich, dass die Punktedateien im Home-Verzeichnis ( .vimrc
, .bashrc
) usw. gesichert werden , aber nicht in den Punkteverzeichnissen /.config
/.cache
/.eclipse
usw.
Irgendwelche Linux-Gurus mit einem Befehl dafür, oder muss ich eine Suche in einen Teer ausführen oder zwei verschiedene Teer-Befehle ausführen, was nicht ideal ist? Eine für Punktedateien im Home-Verzeichnis und eine für alles andere?
Antworten:
So komprimieren Sie Punktdateien in Ihrem Home-Verzeichnis:
Wenn Sie Verzeichnisse einbinden möchten:
Das
?
ist optional im ersten Befehl, aber nicht im zweiten, sonstfind
wird das'.'
Verzeichnis enthalten.(Inspiration von hier genommen .)
quelle
Ich weiß nicht, wie ich das auf einmal machen soll, aber Sie können Ihren Befehl ausführen und eine tar-Datei erstellen und dann
find
den fehlenden Befehl anhängen. verzeichnisse.So etwas wie
$ find -type d -regex '\..+' -exec tar -r {} /media/bjackfly/bkup/bkup.gz \;
Ich habe diesen Befehl nicht getestet, da ich auf einem Windows-Computer sitze und keinen Zugriff auf eine Shell habe. Sie sollten jedoch in der Lage sein, diesen Befehl oder eine Variation davon zu verwenden. Ich bin nicht sicher, ob dieser Befehl die
.
und..
-Verzeichnisse aufnimmt.Prost.
quelle
/.
, also möchten Sie vielleicht das Sternchen in ein Plus ändern.Verwenden Sie logische Suchoperatoren
-and
und-or
wählen Sie alle Dateien und Verzeichnisse aus, die nicht mit '.' Beginnen:Edit slhck kommentiert die obige lösung behandelt keine dateinamen die whitespace enthalten. Dies ist eine Lösung, vielleicht kennt jemand eine elegantere Technik?
quelle
Der eigentliche Trick besteht hier darin, eine reguläre .tar-Datei zu erstellen und dann eine Suche zu verwenden, die mit der Option -u in eine andere tar-Datei geleitet wird, um die .tar-Datei hinzuzufügen oder zu aktualisieren, und sie anschließend einfach zu komprimieren. Vielen Dank an Mogget, der die Grundidee hatte.
quelle
Nein, nicht das. Wenn Sie alle Dateien in der flachen Verzeichnisstruktur ohne Rekursion sichern möchten, verwenden Sie:
Leider ist diese Sicherung gepunktete Dateien mit gepunkteten Verzeichnissen. Eine gute Nachricht ist, dass der Verzeichnisinhalt nicht gesichert wird.
Andernfalls können Sie Folgendes verwenden, wenn der Dateiname keine neuen Zeilenzeichen enthält:
Suchen Sie nach der Option -T. mit dem Argument '-' wird die Dateiliste aus seiner Standardeinstellung abgerufen. Liste wird mit dem Befehl find erzeugt. Dieser Ansatz ist besser, da Sie nicht auf die maximale Befehlslänge beschränkt sind, wie dies bei anderen Beispielen der Fall ist, z. B. tar .... something $ (find) oder find ... | xargs ... tar ..something ... {}, das die vollständige Dateiliste als tar-Befehlsargumente enthält. Dies kann zu einem Überlauf der Befehlsgröße führen.
Die Option --no-recursion dient in diesem Fall nur der Sicherheit. Wenn tar ein Verzeichnis abruft, tritt tar aus diesem Grund nicht in diese Verzeichnisstruktur ein. es ist sehr nützlich in Verbindung mit find.
In diesem Ansatz können Sie den Befehl find ausführen (ohne Backup) und sehen, welche Dateien benötigt werden.
quelle
-print0
auffind
und--null
auftar
Zeilenumbrüche in Dateinamen in dem zweiten Befehl zu ermöglichen.1.
find ./target-dir -type d -name '.?*' -prune -o -print0 | tar --null --no-recursion -cvzf backup.tar.gz -T -
ODER
2.
find ./target-dir -type d -name '.?*' -prune -o -print0 -exec tar --null --no-recursion -cvzf backup.tar.gz -T {} +
quelle