我想将特定文件夹从一个点复制到另一个点,我有超过 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}