複数のフォルダをバックアップしたい。この複数のフォルダで、.git
サブディレクトリを含むすべてのディレクトリを除外したいと思います。したがって、たとえばこのフォルダ階層では、次のようになります。
├── gitrepo <-- exclude this completely
| └── .git/...
│ └── file1
└── nogitrepo <-- keep this
└── file2
--exclude=.git
を使用してすべての.gitディレクトリを正常に除外しましたが、ローカルリポジトリのすべてのコンテンツがすでにリモートSCMにあるため、バックアップに含めたくありません。
私はrsyncの--filter
引数を知っています。 manページを調べましたが、この問題が解決するかどうかはわかりません。しかし、rsyncは事前にすべてのファイルを含むすべてのファイルリストをアセンブルするので、私は楽観的です。
それで、rsyncでgitリポジトリであるすべてのフォルダを除外することは可能ですか? --filter
のディレクトリごとのルールのようなものですか?
SRC
変数とDEST
変数を設定します。次に例を示します。
SRC="./"
DEST="../BACKUP/"
find
のようなものを使用して、すべての.git
ディレクトリを見つけることができます。
find "${SRC}" -type d -name '.git'
これには${SRC}/.git
も含まれます(これは${SRC}
になるため、最終的には "everything"を無視します)... -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}"/
注:これはanyの追跡されていない/変更されたファイルを取得しません。
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