--relocate
отметьте обновляет Вашу рабочую копию, если URL раньше достигал Ваших существующих изменений репозитория. Нет хорошего пути к SVN для переключения рабочей копии на новый репозиторий, потому что даже при том, что это могло бы содержать те же файлы, любое количество других вещей могло бы отличаться - история, количество checkins, содержание файлов, и так далее, и SVN не разработан для составления тех видов различий.
Вы задали свой вопрос просто с клиентской точки зрения, но было бы полезно иметь большее изображение того, что Вы пытаетесь сделать. Например, Вы пытаетесь переместить свой собственный репозиторий в новый сервер? Если так, какой метод Вы использовали и могли бы там быть лучшим? Или Вы использовали репозиторий, управляемый кем-то еще, и они переместили его? Существует вся история старого репозитория в новом репозитории? Существует ли причина, Вы/они не можете скопировать файлы базы данных SVN в новый сервер вместо того, чтобы создать совершенно новый репозиторий?
Существует способ вызвать то, что Вы хотите - а именно, удаляете свои .svn каталоги из Вашей рабочей копии (сделайте резервное копирование сначала!), проверьте новую копию с нового сервера и переместите все .svn каталоги от новой копии до соответствующих мест в Вашей рабочей копии. Но только сделайте это, после того как Вы рассмотрели большее изображение.
Если Вы хотите исключить весь каталог, Ваш шаблон должен соответствовать тому каталогу, не файлам в нем. Использовать --exclude=/data/sub1
вместо --exclude='/data/sub1/*'
Будьте осторожны с заключением в кавычки шаблонов для защиты их от расширения оболочки.
Посмотрите этот пример с проблемой в заключительном вызове:
$ for i in 0 1 2; do mkdir -p /tmp/data/sub$i; echo foo > /tmp/data/sub$i/foo; done
$ find /tmp/data
/tmp/data
/tmp/data/sub2
/tmp/data/sub2/foo
/tmp/data/sub0
/tmp/data/sub0/foo
/tmp/data/sub1
/tmp/data/sub1/foo
$ tar -zvcf /tmp/_data.tar /tmp/data --exclude='/tmp/data/sub[1-2]'
tar: Removing leading `/' from member names
/tmp/data/
/tmp/data/sub0/
/tmp/data/sub0/foo
$ tar -zvcf /tmp/_data.tar /tmp/data --exclude=/tmp/data/sub[1-2]
tar: Removing leading `/' from member names
/tmp/data/
/tmp/data/sub0/
/tmp/data/sub0/foo
$ echo tar -zvcf /tmp/_data.tar /tmp/data --exclude=/tmp/data/sub[1-2]
tar -zvcf /tmp/_data.tar /tmp/data --exclude=/tmp/data/sub[1-2]
$ tar -zvcf /tmp/_data.tar /tmp/data --exclude /tmp/data/sub[1-2]
tar: Removing leading `/' from member names
/tmp/data/
/tmp/data/sub2/
/tmp/data/sub2/foo
/tmp/data/sub0/
/tmp/data/sub0/foo
/tmp/data/sub2/
tar: Removing leading `/' from hard link targets
/tmp/data/sub2/foo
$ echo tar -zvcf /tmp/_data.tar /tmp/data --exclude /tmp/data/sub[1-2]
tar -zvcf /tmp/_data.tar /tmp/data --exclude /tmp/data/sub1 /tmp/data/sub2
Может случиться так что Ваша версия tar
требует что --exclude
опции должны быть помещены в начале tar
команда.
См.: https://stackoverflow.com/q/984204
tar --exclude='./folder' --exclude='./upload/folder2' \
-zcvf /backup/filename.tgz .
См.: http://mandrivausers.org/index.php?/topic/8585-multiple-exclude-in-tar/
tar --exclude=<first> --exclude=<second> -cjf backupfile.bz2 /home/*
Альтернатива:
EXCLD='first second third'
tar -X <(for i in ${EXCLD}; do echo $i; done) -cjf backupfile.bz2 /home/*
Еще один tar
подсказка по команде отсюда:
tar cvfz myproject.tgz --exclude='path/dir_to_exclude1' \
--exclude='path/dir_to_exclude2' myproject
--exclude=mydir/*
затем это не работает (использование tar --exclude=maindir/mydir/* -cjf archive.tar2.bz2 maindir/*
).
– Olivier Pons
06.02.2018, 12:31
tar --version
); debian будет, по-видимому, поставляться со многими различными версиями tar в течение лет.
– msouth
09.02.2018, 06:43
Эта ссылка могла бы быть полезной. http://answers.google.com/answers/threadview/id/739467.html
Два непосредственных различия между нерабочей строкой и некоторыми подсказками в ссылке:
--exclude
.-MAK
привлеченный мое внимание и до сих пор я смог определить следующие различия между своей нерабочей строкой и следующим: 1. Все исключает, прибывают после каталога верхнего уровня. 2. Не может иметь НИКАКИХ пробелов после последнего --exclude
. Я протестирую это понимание и сообщу. +1 на данный момент.
– ateiob
27.02.2012, 18:20
Обходное решение может быть должно использовать комбинацию find ... -prune
и tar
исключить указанные каталоги.
На Mac OS X --exclude
опция GNU tar
кажется, работает, как это должно все же.
В следующем тестовом сценарии каталоги /private/var/log/asl
и /private/var/log/DiagnosticMessages
должны быть исключены из сжатого архива /private/var/log
каталог.
# all successfully tested in Bash shell on Mac OS X (using gnutar and gfind)
# sudo port install findutils # for gfind from MacPorts
sudo gnutar -czf ~/Desktop/varlog.tar.gz /private/var/log --exclude "/private/var/log/asl" --exclude "/private/var/log/DiagnosticMessages"
sudo gnutar -czf ~/Desktop/varlog.tar.gz --exclude "/private/var/log/asl" --exclude "/private/var/log/DiagnosticMessages" /private/var/log
set -f # disable file name globbing
sudo gnutar -czf ~/Desktop/varlog.tar.gz --exclude "/private/var/log/asl" --exclude "/private/var/log/Diagnostic*" /private/var/log
# combining GNU find and tar (on Mac OS X)
sudo gfind /private/var/log -xdev -type d \( -name "asl" -o -name "DiagnosticMessages" \) -prune -o -print0 |
sudo gnutar --null --no-recursion -czf ~/Desktop/varlog.tar.gz --files-from -
# exclude even more dirs
sudo gfind /private/var/log -xdev -type d \( -name "asl" -o -name "[Dacfks]*" \) -prune -o -print0 |
sudo gnutar --null --no-recursion -czf ~/Desktop/varlog.tar.gz --files-from -
# testing the compressed archive
gnutar -C ~/Desktop -xzf ~/Desktop/varlog.tar.gz
sudo gfind /private/var/log ~/Desktop/private \( -iname DiagnosticMessages -or -iname asl \)
sudo rm -rf ~/Desktop/varlog.tar.gz ~/Desktop/private
Возможно, можно попробовать команду другой опцией:
--wildcards
И проверьте, работает ли это, как предназначено.
Поскольку, исключая несколько файлов, попробовать
--exclude=/data/{sub1,sub2,sub3,sub4}
Это сохранит некоторый код и головную боль. Это - глобальное решение для всего вида программ / опции. Если Вы также хотите включать родительский каталог в свой выбор (в этих данных случая), необходимо включать запаздывающую запятую. Например:
umount /data/{sub1,sub2,}
mv /very/very/very/very/long/path/to/a/file{,.bak}
– msouth
09.02.2018, 06:45
] Я использую Mac и обнаружил, что исключения не работают, если папка верхнего уровня не является последним аргументом
пример рабочей команды:
tar czvf tar.tgz --exclude='Music' dir
FYI:
$: tar --version
bsdtar 2.8.3 - libarchive 2.8.3
Вместо --exclude=
используйте -X
с текстовым файлом:
http://www.cyberciti.biz/faq/exclude-certain-files-when-creating-a-tarball-using-tar-command/
В моем случае не исключил по другой причине.
Полный путь против относительного пути.
И исключение, и каталог должны использовать один и тот же формат пути (то есть полный путь или оба относительных пути)
Пример:
tar -cvf ctms-db-sync.tar --exclude='/home/mine/tmp/ctms-db-sync/sql' ctms-db-sync
Это не сработает, потому что исключение использует полный путь, тогда как цель использует относительный путь
tar -cvf ctms-db-sync.tar --exclude='/home/mine/tmp/ctms-db-sync/sql' /home/mine/tmp/ctms-db-sync
Это работает, потому что оба используют полный путь
tar -cvf ctms-db-sync.tar --exclude='ctms-db-sync/sql' ctms-db-sync
Это работает, потому что оба используют относительный путь
Дополнительные примечания к Отличный ответ Р. Перрина :
Предположим, вы не хотите архивировать абсолютные, а относительные пути, например 'data' вместо '/tmp/data'. Чтобы исключить абсолютные пути, ваши аргументы tar будут различаться в зависимости от используемой реализации tar (gnu tar или bsd tar):
$ for i in 0 1 2; do
for j in 0 1 2; do
mkdir -p /tmp/data/sub$i/sub$j
echo foo > /tmp/data/sub$i/sub$j/foo
done
done
$ find /tmp/data/
/tmp/data/
/tmp/data/sub2
/tmp/data/sub2/sub2
/tmp/data/sub2/sub2/foo
/tmp/data/sub2/sub1
/tmp/data/sub2/sub1/foo
/tmp/data/sub2/sub0
/tmp/data/sub2/sub0/foo
/tmp/data/sub1
/tmp/data/sub1/sub2
/tmp/data/sub1/sub2/foo
/tmp/data/sub1/sub1
/tmp/data/sub1/sub1/foo
/tmp/data/sub1/sub0
/tmp/data/sub1/sub0/foo
/tmp/data/sub0
/tmp/data/sub0/sub2
/tmp/data/sub0/sub2/foo
/tmp/data/sub0/sub1
/tmp/data/sub0/sub1/foo
/tmp/data/sub0/sub0
/tmp/data/sub0/sub0/foo
$ cd /tmp/data; tar -zvcf /tmp/_data.tar --exclude './sub[1-2]'
./
./sub0/
./sub0/sub2/
./sub0/sub2/foo
./sub0/sub1/
./sub0/sub1/foo
./sub0/sub0/
./sub0/sub0/foo
# ATTENTION: bsdtar's behaviour differs from traditional tar (without a leading '^')!
$ cd /tmp/data; bsdtar -zvcf /tmp/_data.tar --exclude './sub[1-2]' .
a .
a ./sub0
a ./sub0/sub0
a ./sub0/sub0/foo
# FIX: Use a regex by adding a leading '^' will cause bsdtar to match only parent files and folders.
$ cd /tmp/data; bsdtar -zvcf /tmp/_data.tar --exclude '^./sub[1-2]' .
# ALTERNATIVE: bsdtar -C /tmp/data -zvcf /tmp/_data.tar --exclude '^./sub[1-2]' .
a .
a ./sub0
a ./sub0/sub2
a ./sub0/sub1
a ./sub0/sub0
a ./sub0/sub0/foo
a ./sub0/sub1/foo
a ./sub0/sub2/foo
Только что обнаружено в tar (GNU tar )1.29
Этот вызов не исключает из архива файлы, указанные с помощью --exclude -from:
/bin/tar --files-from ${datafile} --exclude-from ${excludefile} -jcf ${backupfile}
Этот вызов работает корректно:
/bin/tar --exclude-from ${excludefile} --files-from ${datafile} -jcf ${backupfile}
Порядок параметров важен!
Случай успеха:
1 )если указать полный путь для создания резервной копии, при исключении также следует использовать полный путь.
tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz \
--exclude='/opt/ABC/csv/*' --exclude='/opt/ABC/log/*' /opt/ABC
2 )если указать текущий путь для резервного копирования, в исключении также следует использовать только текущий путь.
tar -zcvf backup_27032020.tar.gz \
--exclude='ABC/csv/*' --exclude='ABC/log/*' ABC
Случай отказа:
1 )если указать каталог currentpath для резервного копирования и полный путь для игнорирования, то не будет работать
tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz \
--exclude='/opt/ABC/csv/*' --exclude='/opt/ABC/log/*' ABC
Примечание. :Упоминание об исключении каталога резервного копирования до/после допустимо.
Семейство exclude
параметров применяется к внутренним относительным именам файлов в архиве. Указанный вами абсолютный путь никогда не будет существовать в tar-архиве, поскольку он имеет только относительные пути от предоставленного корня.
--exclude b
(пространство вместо знака "равно") по сравнению с.--exclude=b
. Это имеет какое-либо значение? (не был должен, по моему скромному мнению), – ateiob 29.02.2012, 16:26--exclude=
на той же строке. Таким образом, различием должно быть идиотичное/*
то, что я добавил к каждому подкаталогу. Я протестирую это сегодня вечером в производственном сценарии и сообщу. Еще +1. – ateiob 29.02.2012, 23:43