rsync виключає папку, що містить .git sub dir (--filter)


2

Я хочу створити резервну копію декількох папок. У цій декількох папках я хочу виключити всі каталоги, які містять .gitпідкаталог. Так, наприклад, у цій ієрархії папок:

├── gitrepo        <-- exclude this completely
|   └── .git/...
│   └── file1
└── nogitrepo      <-- keep this
    └── file2

Я вже успішно виключив усі .git каталоги --exclude=.git, але оскільки весь вміст локальних репозиторіїв вже є у віддаленій SCM, я не хочу включати їх у свою резервну копію.

Мені відомо --filterаргумент rsync. Я заглянув у сторінку чоловіка, але не впевнений, що це вирішить цю проблему. Але я оптиміст, оскільки rsync заздалегідь збирає список файлів усіх файлів, включаючи файли.

Отже, чи можна за допомогою rsync виключити всі папки, що є сховищами git? Щось на кшталт правила per-directory --filter?

Відповіді:


0

Налаштуйте свої 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}"/

ПРИМІТКА. Це не дозволить забрати будь-які незатребувані / змінені файли.


0

find your_DIR_for_BACKUP -name .git | sed 's/\/.git//g' > ~/exclude_repos

і запустіть rsync з опцією --exclude-from, виберіть заповнений файл ~ / виключити_repos

rsync --exclude-from ~/exclude_repos your_DIR_for_BACKUP_SRC DST


най мінімалістичніша відповідь, але вирішена і вона! заради повноти може бути лише додати -dпрапор каталогу доfind
0x00F
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.