用于复制具有模式匹配的特定目录的 Bash 脚本

用于复制具有模式匹配的特定目录的 Bash 脚本

如何将目录从一个位置复制到与模式匹配的另一个位置。

例如:

source = /media/src/
destination = /media/dest/
  • 模式如下/b/w{2}_/w{2}/b。即所有目录,如aa_bbfg_sdre_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

相关内容