Bash
使用模式匹配複製特定目錄的 Bash 腳本
如何將目錄從一個位置複製到與模式匹配的另一個位置。
例如:
source = /media/src/ destination = /media/dest/
- 圖案如
/b/w{2}_/w{2}/b
。即所有目錄,如aa_bb
,fg_sd
,re_ya
,AA_BB
,aa_Bx
等Ba_BB
。
您可以使用模式匹配:
cp /media/src/[[:lower:]][[:lower:]]_[[:lower:]][[:lower:]] /media/dest/
這
[[:lower:]]
是一個 POSIX 定義的字元類,它匹配所有分類為小寫字母的字元。編輯:要匹配所有字元,請使用字元類
alpha
而不是lower
:cp /media/src/[[:alpha:]][[:alpha:]]_[[:alpha:]][[:alpha:]] /media/dest/
請檢查這是否是您想要的。它搜尋格式為 xx_yy/ab_cd/&&_$$ (2char_2char) 的目錄並將內容複製到新目錄。
usage : ./script.sh cat script.sh #!/bin/bash MYDIR="/media/src/" NEWDIRPATH="/media/dest" DIRS=`ls -l $MYDIR | grep "^d" | awk '{print $9}'` for DIR in $DIRS do total_characters=`echo $DIR | wc -m` if [ $total_characters -eq 6 ]; then has_underscore=`echo "$DIR" | grep "_"` if [ "$has_underscore" != "" ]; then echo "${DIR}" start_string_count=`echo $DIR | awk -F '_' '{print $1}' | wc -m` end_string_count=`echo $DIR | awk -F '_' '{print $2}' | wc -m` echo "start_string_count => $start_string_count ; end_string_count => $end_string_count" if [ $start_string_count -eq 3 ] && [ $end_string_count -eq 3 ]; then cp -r $DIR $NEWDIRPATH/ fi fi fi done