Bash

使用模式匹配複製特定目錄的 Bash 腳本

  • September 9, 2015

如何將目錄從一個位置複製到與模式匹配的另一個位置。

例如:

source = /media/src/
destination = /media/dest/
  • 圖案如/b/w{2}_/w{2}/b。即所有目錄,如aa_bb, fg_sd, re_ya, AA_BB,aa_BxBa_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

引用自:https://unix.stackexchange.com/questions/228200