パターンマッチングを使用して特定のディレクトリをコピーするBashスクリプト

パターンマッチングを使用して特定のディレクトリをコピーするBashスクリプト

パターンに一致するある場所から別の場所にディレクトリをコピーする方法。

たとえば、

source = /media/src/
destination = /media/dest/
  • パターンは次のとおりです/b/w{2}_/w{2}/b。つまりaa_bb、、、、、などfg_sdのすべてのディレクトリです。re_yaAA_BBaa_BxBa_BB

答え1

あなたはそれを使用することができますパターンマッチング:

cp /media/src/[[:lower:]][[:lower:]]_[[:lower:]][[:lower:]] /media/dest/

これは[[:lower:]]POSIX によって定義されます。キャラクタークラス小文字に分類されたすべての文字と一致します。

編集するalpha:すべての文字を一致させるには、代わりに文字クラスを使用してくださいlower

cp /media/src/[[:alpha:]][[:alpha:]]_[[:alpha:]][[:alpha:]] /media/dest/

答え2

これがあなたが望むものであることを確認してください。 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

関連情報