Это datapath query essmap
. vpaths являются дешевой распродажей. Исходный SDD (используемый через datapath
команда), создал vpaths, в то время как более новое и лучшее поддерживали SDDPCM (используемый через pcmpath
команда), использует hdisks только.
Видеть, что происходит изменение rsync
управляйте к echo
команда сначала.
$ echo "rsync \" -a ${params[@]} $source/* $destination\""
Я изменил бы ту строку на это вместо этого:
$ rsync -a "${params[@]}" "$source/"* "$destination"
Если Вы записали это:
rsync " -a $params $source/* $destination"
затем rsync
команда получила бы единственную строку как свой аргумент, потому что все переменные расширены в двойных кавычках. Например, если $params
--exclude=.git
, $source
/somewhere
и $destination
/elsewhere
затем аргумент был бы
-a --exclude=.git /somewhere/* /elsewhere
Существует добавленная морщина: "${params[@]}"
разделяет массив на отдельные параметры. Текст прежде ${params[@]}
присоединен к первому элементу массива и тексту после ${params[@]}
присоединен к последнему элементу массива. Так rsync
назван с четырьмя параметрами:
-a --exclude=.git
--exclude=deploy
--exclude=app/config/database.php
--exclude=app/config/config.php /somewhere/* /elsewhere
Каждый параметр должен быть отдельной дважды заключенной в кавычки строкой. Вам нужны двойные кавычки для защиты расширения переменных в случае, если они содержат пробельные или подстановочные символы. Для массива, расширенного с ${NAME[@]}
, "${NAME[@]}"
места каждый элемент в отдельном параметре. Пробелы, которые разделяют элементы и символы, которые предназначаются для функционирования как подстановочные знаки, должны остаться неупомянутыми.
rsync -a "${params[@]}" -- "$source"/* "$destination"
Это исключает точечные файлы непосредственно под $source
, из-за /
. Скопировать файлы под $source
в файлы с тем же именем под $destination
, просто поместите наклонную черту после пути к исходному каталогу.
rsync -a "${params[@]}" -- "$source/" "$destination"