Для постоянно подключенного диска для хранения резервных копий других хостов / var / bacula
подойдет; hier (7)
говорит, что / var
предназначен для «многоцелевого журнала, временных , временных и файлов спула» (выделено мной) . Резервные копии по самой своей природе со временем меняются, что делает / var
хорошим выбором. MySQL
на некоторых платформах настроен, например, на использование / var
в качестве основного хранилища.
В качестве альтернативы, вы можете смонтировать его в / usr / local / bacula
, чтобы следовать соглашению FreeBSD о размещении программного обеспечения, установленного из портов, и связанных с ним файлов конфигурации и данных в / usr / local
. С другой стороны, мои резервные копии хранятся в новом каталоге верхнего уровня, / data
, который также содержит мои общие ресурсы NFS и SMB.
Это поведение не воспроизводится с find
в FreeBSD 11.1 -RELEASE при использовании /bin/sh
в качестве оболочки. Я смог воспроизвести его как под /bin/csh
, так и под /bin/tcsh
.
Чтобы исправить это в csh
и tcsh
, укажите {}
как \{\}
или как '{}'
или используйте описанный ниже метод.
Чтобы правильно объединить текущий путь с какой-либо другой строкой в реализации find
, которая не расширяется должным образом {}
при использовании это как часть строки, это можно сделать с дочерней оболочкой.
Пример:
find. -type f -name '*.c' -exec sh -c 'printf "(result):%s\n" "$@"' sh {} +
или с echo
(, но см. " Почему printf лучше, чем echo? " ),
find. -type f -name '*.c' -exec sh -c '
for name do
echo "(result):$name"
done' sh {} +
или
find. -type f -name '*.c' -execdir sh -c '
for name do
mv -- "$name" "OLD_${name##*/}"
done' sh {} +
То есть дайте дочерней оболочке(sh -c
здесь )пути как команду строковые аргументы, а затем использовать их в порожденной оболочке для конкатенации их, как вы обычно используете переменные оболочки.
(${name##*/}
выше предназначено только для защиты от GNU find
, который добавляет ./
к путям при использовании-execdir
)
Связанные:
Два последних примера меня смутили. Здесь, если find
не заменит {}
, то можно предположить, что он оставит его таким, как -, и на выходе будет(result):{}
:
# /usr/bin/find. -maxdepth 1 -execdir echo "(result):"{} \;
(result):
Может быть, это ваша оболочка, которая разрывает эти foo{}
строки?
Похоже, tcsh
у меня есть именно это:
$ tcsh -c 'echo foo{}bar '
foobar
$ tcsh -c 'echo foo {} bar '
foo {} bar
Это было также упомянуто в комментариях к другому вопросу о цитировании {}
, GNU находит и маскирует {} для некоторых оболочек -какие? .
Обходной путь :заключенные в кавычки строки, содержащие{}
:
$ tcsh -c 'echo "foo{}bar" '
foo{}bar
(Еще одна оболочка, которую необходимо указать для {}
, — это fish
, но она также отбрасывает одинокую {}
.)
Возможно, вам лучше использовать что-то вроде:
find. -type f -name 'data*' -print0 | xargs -0 -I % mv '%' 'OLD_%'
с помощью find -print0 | xargs -0, каждое имя файла отделяется нулевым байтом, поэтому пробелы и другие специальные символы в имени файла не приведут к разделению имени файла на два отдельных аргумента.