Я подозреваю, что xargs является Вашим другом в этом экземпляре.
Полностью непротестированный:
# cat file | xargs -IREPLACE rsync -v REPLACE server:/path
xargs возьмет данные из stdin и добавит его к командной строке один параметр на входную строку, пока это не заполнит длину командной строки и затем выполняет отдельную команду, пока все входные строки не были израсходованы. Это будет означать, что rsync мог работать несколько раз. Это не должно быть проблемой в этом случае, но могло быть с другими командами.
Обычно xargs просто прикрепляет аргументы на конец строки, но с rsync Вы хотели бы иметь место назначения в последний раз, таким образом, мы используем-I опцию заменить строку аргументами. (Это - бит, это не тестируется). Я также немного не уверен, что rsync сделает с путями, поэтому протестируйте это тщательно перед использованием его в гневе.
Если у Вас действительно есть проблема с xargs, Вы могли бы использовать что-то как:
for i in $(cat file); do rsync -v $i server:/path; done
Если Ваш файл больше, Вы, вероятно, хотите использовать в то время как/чтение цикл вместо этого. Это будет намного медленнее, поскольку это сделает единственный файл за один раз.
Это работало на меня:
param ( $CsvFile = "D:\foo\bar.csv" )
$worksheet = Import-Csv $CsvFile
$worksheet |ForEach-Object {
New-VM -VMHost $_.VMHost `
-Name $_.Name `
-MemoryMB $_.MemoryMB `
-DiskMB $_.DiskMB `
-NetworkName $_.NetworkName `
-Datastore $_.Datastore `
-CD:$FALSE `
-ResourcePool $_.ResourcePool `
-Description $_.Description `
-GuestId $_.GuestId `
-NumCPU $_.NumCPU
}