美文网首页
linux下把文件夹复制到所有同名文件夹脚本

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

作者: Hackart | 来源:发表于2017-06-07 12:55 被阅读0次

    需求:复制文件夹到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,最后再改回。 读取用户输入文件名,用通配符把全文件夹放于数组 循环结构把原文件夹下所有文件放入所有数组。

    代码:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    #!/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 Linux学习,http:// linux.it.net.cn

    代码说明:

    ?

    1

    sed -i 's/alias cp/#&/' ~/.bashrc  >/dev/null

    把~/.bashrc文件中的alias cp一行给注释掉

    ?

    1

    array=($name*)

    使用通配符把所有文件夹放入数组

    ?

    1

    name2="$name/*"

    name2为原文件夹目录下所有文件

    ?

    1

    ${#array}

    获取数组长度

    ?

    1

    cp -r $name2 ${array[$i]}

    复制文件

    ?

    1

    sed -i "/#alias cp/i/alias cp='cp -i'" ~/.bashrc >/dev/null sed -i '/#alias cp/d' ~/.bashrc >/dev/null

    Linux学习,http:// linux.it.net.cn

    ?

    1

    改回~/.bashrc文件

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

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

    相关文章

      网友评论

          本文标题:linux下把文件夹复制到所有同名文件夹脚本

          本文链接:https://www.haomeiwen.com/subject/xjwofxtx.html