如何将目录名称放入变量中?

如何将目录名称放入变量中?

我正在编写一个 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)

相关内容