패턴 일치를 사용하여 특정 디렉터리를 복사하는 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

답변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

관련 정보