Сценарий Bash для копирования определенных каталогов с сопоставлением с шаблоном

Потому что ! - зарезервированное слово в bash.

Чаще всего используется для отрицания данных и для доступа к последней команде, но ее можно использовать для нескольких разных вещей, поэтому лучший совет - проверить страницу руководства и использовать одинарные кавычки (например, ') вокруг строк, которые не нуждаются в расширении.

0
08.09.2015, 12:23
2 ответа

Вы можете использовать сопоставление по образцу:

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

[[:lower:]]] - это определенный POSIX класс символов, который соответствует всем символам, классифицированным как строчные буквы.

Edit: Для соответствия всем символам используйте класс символов альфа вместо нижний:

cp /media/src/[[:alpha:]][[:alpha:]]_[[:alpha:]][[:alpha:]] /media/dest/
2
29.04.2021, 00:24

Пожалуйста, проверьте, хотите ли вы этого. Он ищет каталоги в формате 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
0
29.04.2021, 00:24

Теги

Похожие вопросы