Script Bash para copiar diretórios específicos com correspondência de padrões

0

Como posso copiar diretórios de um local para outro local que corresponda a um padrão.

Por exemplo:

source = /media/src/
destination = /media/dest/
  • O padrão é como /b/w{2}_/w{2}/b . ou seja, todos os diretórios como aa_bb , fg_sd , re_ya , AA_BB , aa_Bx , Ba_BB etc.
por Nepal12 08.09.2015 / 09:18

2 respostas

2

Você pode usar a correspondência de padrões :

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

A [[:lower:]] é uma POSA classe de caracteres definida que corresponde a todos os caracteres classificados como letras minúsculas.

Editar : para corresponder a todos os caracteres, use a classe de caractere alpha em vez de lower :

cp /media/src/[[:alpha:]][[:alpha:]]_[[:alpha:]][[:alpha:]] /media/dest/
    
por 08.09.2015 / 09:24
0

Por favor, verifique se é isso que você queria. Ele procura diretórios com formato xx_yy / ab_cd / & & $$ $$ (2char_2char) e copia o conteúdo para um novo diretório.

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
    
por 09.09.2015 / 16:44