如何使用命令行将一个文件夹复制到多个文件夹?

如何使用命令行将一个文件夹复制到多个文件夹?

我想将特定文件夹从一个点复制到另一个点,我有超过 300 个目标文件夹,我想将该特定文件夹复制到其中。有人能帮我找到合适的解决方案吗?shell 脚本建议会很棒。

答案1

我建议使用while ... do循环

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

或者,使用xargs

xargs -n1 -a destinations.txt cp -R foo --

答案2

假设您调用了第一个文件夹foo,并且您想将其复制到指定的目录中destinations.txt(每行一个)。

您可以for为此使用 -loop:

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 

答案3

我为此所拥有的功能的核心.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
}

答案4

cp -r sourceFolder {destination1,destination2,destination14}

相关内容