Ich möchte mehrere Ordner sichern. In diesen mehreren Ordnern möchte ich alle Verzeichnisse ausschließen, die ein .git
Unterverzeichnis enthalten. Also zum Beispiel in dieser Ordnerhierarchie:
├── gitrepo <-- exclude this completely
| └── .git/...
│ └── file1
└── nogitrepo <-- keep this
└── file2
Ich habe bereits alle .git-Verzeichnisse erfolgreich mit ausgeschlossen --exclude=.git
, aber da sich der gesamte Inhalt der lokalen Repositories bereits im Remote-SCM befindet, möchte ich ihn nicht in mein Backup einschließen.
Ich kenne das --filter
Argument von rsync. Ich habe mir die Manpage angesehen, bin mir aber nicht sicher, ob sie das Problem lösen wird. Ich bin jedoch optimistisch, da rsync vorher eine Dateiliste aller enthaltenen Dateien zusammenstellt.
Ist es mit rsync möglich, alle Ordner auszuschließen, die Git-Repositorys sind? So etwas wie die Regel pro Verzeichnis für --filter
?
Antwort1
Richten Sie Ihre SRC
und DEST
Variablen ein, zum Beispiel:
SRC="./"
DEST="../BACKUP/"
find
Um alle .git
Verzeichnisse zu finden , können Sie Folgendes verwenden :
find "${SRC}" -type d -name '.git'
Dies wird ${SRC}/.git
jedoch auch einschließen (was zu wird ${SRC}
und somit letztendlich " ignoriert.alles")... um dies zu vermeiden, verwenden Sie -mindepth 2
:
find "${SRC}" -mindepth 2 -type d -name '.git'
Als nächstes entfernen Sie die nachfolgenden /.git
Komponenten:
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!/.git$!!g'
Da rsync
das Arbeitsverzeichnis auf die Quelle festgelegt wird, müssen wir ${SRC}
auch den Anfangsbuchstaben aus den Ergebnissen entfernen:
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g'
Verbinden Sie dies abschließend mit dem rsync
Befehl, indem Sie verwenden --exclude-from
und übergeben -
(dh: stdin
):
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g' \
| rsync -av --exclude-from - "${SRC}" "${DEST}"/
NOTIZ:das wird nicht ankommenbeliebignicht verfolgte/geänderte Dateien.
Antwort2
find your_DIR_for_BACKUP -name .git | sed 's/\/.git//g' > ~/exclude_repos
und führen Sie rsync mit der Option --exclude-from aus. Wählen Sie die ausgefüllte Datei ~/exclude_repos aus.
rsync --exclude-from ~/exclude_repos your_DIR_for_BACKUP_SRC DST