首頁 > 軟體

Linux下把資料夾複製到所有同名資料夾的指令碼

2020-06-16 17:55:00

需求:複製資料夾到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/ialias 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]}

複製檔案

sed -i "/#alias cp/ialias 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一行的前方加上#

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-08/121850.htm


IT145.com E-mail:sddin#qq.com