루프에 대한 bash는 특정 하위 디렉터리를 제외합니다.

루프에 대한 bash는 특정 하위 디렉터리를 제외합니다.

이중성을 사용하여 디렉터리 백업을 수행하는 스크립트가 있습니다. "for" 루프에서 일부 하위 디렉터리를 제외하려고 합니다. 어떻게 이를 달성할 수 있나요?

현재 스크립트

backup_volume() { TARGET_URL=$1
   for vol in /dir/*; do
      VOLUME=$(basename $vol)
      duplicitiy backupcommand...
   done
}

/dir/ 내에 제외하고 싶은 하위 디렉터리가 있습니다. 어떤 조언이라도 주시면 감사하겠습니다!

답변1

duplicity제외 디렉터리를 알아보세요

duplicity --exclude=/dir/somedir/someotherdir/dontbackup ...other options...

/dir(전체를 백업하기 위해 한 번 실행됩니다)

각 하위 디렉터리에 대해 별도의 백업을 만들어야 하는 경우 /dir먼저 패턴을 사용하여 하위 디렉터리가 일치하는지 확인한 /dir/*/다음 피하려는 파일 이름과 디렉터리의 파일 이름을 테스트합니다.

for vol in /dir/*/; do
    case $vol in
        */somedirectory/)    continue ;;
        */someotherdirtory/) continue ;;
    esac

    volume=$( basename "$vol" )

    duplicity ...
done

또는,

for vol in /dir/*/; do
    volume=$( basename "$vol" )

    case $volume in
        somedirectory)    continue ;;
        someotherdirtory) continue ;;
    esac

    duplicity ...
done

또는,

for vol in /dir/*/; do
    volume=$( basename "$vol" )

    case $volume in
        somedirectory|someotherdirectory|more here)    continue ;;
    esac

    duplicity ...
done

또는 확장된 글로빙 모드를 사용하세요 bash.

shopt -s extglob

for vol in /dir/!(somedirectory|someotherdirectory|...)/
    volume=$( basename "$vol" )
    duplicity ...
done

관련 정보