我正在编写一个 shell 脚本来自动恢复数据库备份。作为其中的一部分,我需要知道包含备份文件的目录的名称。然而,这每次都会改变。
如何将目录名称放入变量中以供稍后参考。
示例:我有基本目录:
/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
.
通配模式末尾的斜杠确保该模式仅匹配目录。
您可能还想设置 shell 选项failglob
( shopt -s failglob
)。如果模式不匹配任何内容,这样做将使 shell 生成诊断消息。这还允许您在失败时退出脚本:
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)