複数のフォルダをバックアップしたいです。この複数のフォルダでは、サブディレクトリを含むすべてのディレクトリを除外したいです.git
。たとえば、このフォルダ階層では次のようになります。
├── gitrepo <-- exclude this completely
| └── .git/...
│ └── file1
└── nogitrepo <-- keep this
└── file2
すでに .git ディレクトリをすべて除外しました--exclude=.git
が、ローカル リポジトリのすべてのコンテンツがすでにリモート SCM にあるため、それらをバックアップに含めたくありません。
rsync の議論については承知しています--filter
。マニュアルページを調べましたが、この問題が解決するかどうかはわかりません。ただし、rsync は事前にすべてのインクルードファイルのファイルリストを組み立てるので、楽観的です。
では、rsync を使用して、git リポジトリであるすべてのフォルダーを除外することは可能ですか? のディレクトリごとのルールのようなものですか--filter
?
答え1
SRC
および変数を設定しますDEST
。例:
SRC="./"
DEST="../BACKUP/"
すべてのディレクトリfind
を見つけるには、次のようにします。.git
find "${SRC}" -type d -name '.git'
ただし、これには も含まれます${SRC}/.git
( は になり${SRC}
、最終的には を無視します)。すべて")...その使用を避けるには-mindepth 2
:
find "${SRC}" -mindepth 2 -type d -name '.git'
次に、末尾の/.git
コンポーネントを削除します。
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!/.git$!!g'
rsync
作業ディレクトリをソースに設定するので、結果からも初期値を削除する必要があります${SRC}
。
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g'
rsync
最後に、を使用して、これをコマンドに結合し--exclude-from
、 を渡します-
(つまり、stdin
):
find "${SRC}" -mindepth 2 -type d -name '.git' \
| sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g' \
| rsync -av --exclude-from - "${SRC}" "${DEST}"/
注記:これは拾えないどれでも追跡されていない/変更されたファイル。
答え2
find your_DIR_for_BACKUP -name .git | sed 's/\/.git//g' > ~/exclude_repos
--exclude-from オプションで rsync を実行し、埋め込まれたファイル ~/exclude_repos を選択します。
rsync --exclude-from ~/exclude_repos your_DIR_for_BACKUP_SRC DST