码迷,mamicode.com
首页 > 系统相关 > 详细

Linux下把文件夹复制到所有同名文件夹的脚本

时间:2015-08-17 14:05:44      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:linux   脚本   sh   

需求:复制文件夹到Linux目录下,覆盖该Linux目录下所有同名文件夹
目标:Linux下,执行本脚本,输入文件夹名,即可批量复制覆盖。
使用说明:
        先把本脚本文件要复制的文件夹移到将要覆盖的Linux目录,之后执行本脚本即可。
        执行命令:
                ./tcopy.sh
        1.如果提示-bash: ./tcopy.sh: Permission denied,那要先赋给其权限:
                chmod +x tcopy.sh
            再执行./tcopy.sh即可。
        2.觉着麻烦的话 sh tcopy.sh也行。

逻辑说明:
        原系统的cp命令,是cp -i命令,这样执行cp命令是无法自动覆盖的。所以改文件~/.bashrc,最后再改回。
        读取用户输入文件名,用通配符把全文件夹放于数组
        循环结构把原文件夹下所有文件放入所有数组。

代码:
#!/bin/sh
sed -i 's/alias cp/#&/' ~/.bashrc  >/dev/null

echo "Please input the filename:"
read name
array=($name*)
name2="$name/*"

for ((i=1; i<${#array}; i++))
do
cp -r $name2 ${array[$i]}
done

sed -i "/#alias cp/i\alias cp='cp -i'" ~/.bashrc  >/dev/null
sed -i '/#alias cp/d' ~/.bashrc  >/dev/null
保存文件为tcopy.sh

代码说明:
sed -i 's/alias cp/#&/' ~/.bashrc  >/dev/null
把~/.bashrc文件中的alias cp一行给注释掉
array=($name*)
使用通配符把所有文件夹放入数组
name2="$name/*"
name2为原文件夹目录下所有文件
${#array}
获取数组长度
cp -r $name2 ${array[$i]}
复制文件
<pre name="code" class="cpp" style="font-size: 14px; line-height: 21px;">sed -i "/#alias cp/i\alias cp='cp -i'" ~/.bashrc  >/dev/null
sed -i '/#alias cp/d' ~/.bashrc  >/dev/null

改回~/.bashrc文件

风险项:
~/.bashrc文件未必是alias cp=‘cp -i‘

如果使用本脚本后,出现复制文件每次都询问是否覆盖即:cp: overwrite,
请手动修改~/.bashrc文件,在alias cp一行的前方加上#

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux下把文件夹复制到所有同名文件夹的脚本

标签:linux   脚本   sh   

原文地址:http://blog.csdn.net/tiantuanzi/article/details/47723407

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!