歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下把文件夾復制到所有同名文件夾的腳本

Linux下把文件夾復制到所有同名文件夾的腳本

日期:2017/2/28 13:58:50   编辑:Linux教程

需求:復制文件夾到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]}

復制文件

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一行的前方加上#

Copyright © Linux教程網 All Rights Reserved