Как скопировать папку в несколько папок с помощью командной строки? [duplicate]

На этот вопрос уже есть ответ здесь:

Я хочу скопировать определенную папку из одной точки в другую, и у меня есть более 300 папок назначения, куда я хочу скопировать эту конкретную папку. Может ли кто-нибудь помочь мне с правильным решением? Было бы здорово, если бы вы предложили сценарий оболочки.

6
задан 6 July 2016 в 00:46

4 ответа

Принятие Вашей первой папки называют foo, и Вы хотите скопировать его в каталоги, которые указаны в destinations.txt (один на строку).

Вы могли использовать for - цикл для этого:

for i in $(cat destinations.txt)
do
  echo "$i" #prints the name of the current target -> you can see progress, if it takes long  
  cp -R foo/ "$i"
done 
10
ответ дан 23 November 2019 в 07:15

Ядро функции я имею в моем .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
}
3
ответ дан 23 November 2019 в 07:15

Я предложил бы использовать while ... do цикл

while read -r d; do
  cp -R -- foo/ "$d"
done < destinations.txt
<час>

, С другой стороны, использование xargs

xargs -n1 -a destinations.txt cp -R foo --
12
ответ дан 23 November 2019 в 07:15
cp -r sourceFolder {destination1,destination2,destination14}
0
ответ дан 23 November 2019 в 07:15

Другие вопросы по тегам:

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