Я хочу скопировать определенную папку из одной точки в другую, и у меня есть более 300 целевых папок, где я хочу скопировать эту конкретную папку. Может ли кто-нибудь помочь мне с правильным решением? предложение сценария оболочки было бы здорово.
Я бы предложил использовать цикл while ... do
while read -r d; do
cp -R -- foo/ "$d"
done < destinations.txt
В качестве альтернативы, используя xargs
xargs -n1 -a destinations.txt cp -R foo --
Ядро функции, имеющейся у меня в .bashrc, для этого:
echo $destinations | xargs -n 1 cp $sourcefile
(думаю, я получил это из этого ответа) Если адресаты находятся в destinations.txt, просто замените echo $destinations на cat destinations.txt. Имена файлов с пробелами выдадут вам проблемы, если они не указаны на входе, поэтому будьте осторожны.
Вот полная функция из моего .bashrc. Вероятно, не очень надежный, поскольку мои варианты использования были простыми, и я не хотел тратить на это много времени, поэтому не ожидайте, что он будет обрабатывать более сложные имена файлов.
function distribute {
arguments=""
destinations=""
sourcefile=""
while [[ $# -ge 1 ]]; do
key="$1"
if [[ "$key" == "-h" ]]; then
echo "usage: $0 [flags to cp] source_file destination_1 [... destination_N]"
elif [[ "$key" == -* ]]; then
arguments+=" $key"
elif [ -z "$sourcefile" ]; then
sourcefile="$key"
else
destinations+=" $key"
fi
shift
done
echo $destinations | xargs -n 1 cp $arguments $sourcefile
}