디렉토리 이름을 변수에 어떻게 넣을 수 있나요?

디렉토리 이름을 변수에 어떻게 넣을 수 있나요?

데이터베이스 백업을 자동으로 복원하는 쉘 스크립트를 작성 중입니다. 이 작업의 일부로 백업 파일이 포함된 디렉터리의 이름을 알아야 합니다. 그러나 이는 매번 변경됩니다.

나중에 참조할 수 있도록 디렉토리 이름을 변수에 어떻게 넣을 수 있습니까?

예: 기본 디렉터리가 있습니다.

/var/backups/db/

여기에는 이름이 매번 변경되는 또 다른 디렉터리도 있습니다(예 /var/backups/db/db_backup_109245_abc/: ).

db_backup_109245_abc나중에 참조할 수 있도록 변수의 전체 경로를 포함한 디렉터리 이름(예: )을 얻으려면 어떻게 해야 합니까 ?

여기에는 디렉터리가 하나만 있으며(프로세스의 초기 부분에서 이를 보장함) 디렉터리 이름은 매번 달라집니다.

답변1

좋아, 알아냈어:

BackupDir=$(find /var/backups/db/* -maxdepth 0 -type d)

답변2

디렉토리에 하위 디렉토리가 하나만 있는 경우 다음을 /var/backups/db사용합니다.

set -- /var/backups/db/*/
dirpath=$1

해당 디렉터리의 경로 이름을 변수에 할당합니다 dirpath.

와일드카드 패턴 끝에 있는 슬래시는 패턴이 디렉터리에만 일치하도록 보장합니다.

failglob쉘 옵션 ( ) 을 설정할 수도 있습니다 shopt -s failglob. 그렇게 하면 패턴이 일치하지 않는 경우 쉘이 진단 메시지를 생성하게 됩니다. 또한 실패 시 스크립트를 종료할 수도 있습니다.

shopt -s failglob
set -- /var/backups/db/*/ || exit 1
dirpath=$1

이 코드 뒤에는 다음을 얻을 수도 있습니다.모두디렉터리 경로 이름 "$@"(두 개 이상인 경우)

답변3

다음과 같은 가정을 믿을 수 있다고 가정해 보겠습니다.

  • 백업 접두사는 항상 "db_backup_"입니다.
  • 마지막 백업 디렉터리(내가 이해한다면 찾고 있는 디렉터리)는 나중 날짜를 갖습니다.

그러면 이 경로를 사용할 수 있습니다

backup_path=$(ls -t /var/backups/db/ |grep db_backup_ | head -1)

관련 정보