바이너리 파일 이름에서 특정 문자 집합을 식별합니다.

바이너리 파일 이름에서 특정 문자 집합을 식별합니다.

다음 작업을 수행하기 위해 bash 스크립트를 만들려고 합니다.

  1. 바이너리 파일 이름을 읽습니다.
  2. 입력 바이너리 파일 이름에 A1또는 B1(대소문자 구분 안 함)이 포함되어 있는지 확인합니다.
  3. 인식된 문자열에 A1복사 대상이 포함되어 있는지 여부에 따라 다르며 dirA/, 그렇지 않으면 B1복사 대상이 포함되어 있는지 여부에 따라 다릅니다 dirB/.

지금까지 과제 1과 2를 해결했는데 과제 2에 대한 안내가 필요합니다.

답변1

A1이름에 해당 하위 문자열이 있는 현재 디렉터리의 모든 파일을 복사한 dirA다음(디렉토리가 존재한다고 가정) B1이름에 해당 하위 문자열이 있는 모든 파일을 다음 위치에 복사합니다.dirB

cp ./*A1* dirA/
cp ./*B1* dirB/

또는 --파일 이름 피연산자에서 명령줄 옵션을 분리하려면 다음을 수행하십시오.

cp -- *A1* dirA/
cp -- *B1* dirB/

숨겨진 이름(점으로 시작하는 이름)이 있는 파일은 무시됩니다. 이를 포함해야 하는 경우 명령을 실행하기 전에 셸 옵션을 설정하세요 dotglob.bashshopt -s dotglob


명령줄에서 하나 이상의 파일 이름을 수신하고 이를 파일 이름에 따라 올바른 디렉터리로 이동해야 하는 스크립트와 관련된 업데이트된 문제를 해결합니다.

이를 사용하여 case ... esac주어진 문자열(파일 이름)이 패턴과 일치하는지 테스트한 다음 해당 테스트 결과에 따라 대상 디렉터리를 설정할 수 있습니다. 아래 코드에서는 패턴이 일치하지 않는 경우에도 경고 메시지를 인쇄합니다.

#!/bin/sh

for filename do
    case $filename in
        *A1*) destdir=dirA ;;
        *B1*) destdir=dirB ;;
        *)
            printf 'Can not sort "%s", skipping it\n' "$filename" >&2
            continue
    esac

    cp -- "$filename" "$destdir"
done

다시 대상 디렉토리가 존재한다고 가정합니다. 그렇지 않은 경우 cp명령을 실행하기 전에 를 사용하여 생성 해야 할 수도 있습니다 mkdir -p -- "$destdir" || exit.

관련 정보