데이터베이스 백업을 자동으로 복원하는 쉘 스크립트를 작성 중입니다. 이 작업의 일부로 백업 파일이 포함된 디렉터리의 이름을 알아야 합니다. 그러나 이는 매번 변경됩니다.
나중에 참조할 수 있도록 디렉토리 이름을 변수에 어떻게 넣을 수 있습니까?
예: 기본 디렉터리가 있습니다.
/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)