Как я могу добавить массив аргументов в моем вызове rsync в сценарии?

Это datapath query essmap. vpaths являются дешевой распродажей. Исходный SDD (используемый через datapath команда), создал vpaths, в то время как более новое и лучшее поддерживали SDDPCM (используемый через pcmpath команда), использует hdisks только.

2
10.09.2013, 14:31
2 ответа

Видеть, что происходит изменение rsync управляйте к echo команда сначала.

$ echo "rsync \" -a ${params[@]} $source/* $destination\""

Потенциал фиксирует

Я изменил бы ту строку на это вместо этого:

$ rsync -a "${params[@]}" "$source/"* "$destination"
2
27.01.2020, 22:14
  • 1
    , почему много источник и место назначения там? –  Rahul Patil 10.09.2013, 14:33
  • 2
    @RahulPatil - не после Вашего вопроса –  slm♦ 10.09.2013, 14:39
  • 3
    @Loupax - избавляются от двойных кавычек вокруг аргументов. Я думаю, что это было первичным размещением. Посмотрите обновление. Можно попробовать его и без $ (эхо...) –  slm♦ 10.09.2013, 15:00
  • 4
    Первый сценарий, хороший :) –  Loupax 10.09.2013, 15:09
  • 5
    @Loupax чувств - красивый первый сценарий. Хорошее использование массивов, думая правильный путь! –  slm♦ 10.09.2013, 15:15

Если Вы записали это:

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"
0
27.01.2020, 22:14

Теги

Похожие вопросы