我正在谷歌上搜索这个,但这些术语太通用了,我得到了太多的误报,所以嘿,我会在这里问。我确信有一个简单的答案,但我通常不会在 *nix 中编写脚本。
我正在尝试为我们的测试环境编写数据库刷新脚本。备份是从 smbfs 共享安装的,例如/data/backups/prod
,但子文件夹有点棘手。看起来像myproddbserver/yyyymmdd
,下面有一堆文件。
我想执行一个命令restore
,从最近的yyyymmdd
目录中收集已知名称的文件。例如,如果我有:
myproddbserver/20130630/foo.bak
myproddbserver/20130630/bar.bak
myproddbserver/20130731/foo.bak
myproddbserver/20130731/bar.bak
我想恢复myproddbserver/20130731/foo.bak
和myproddbserver/20130731/bar.bak
.
我如何可靠地获得这些路径?
答案1
由于您使用的是yyyymmdd
格式,因此数字排序可以很好地工作。最快的方法是使用sort
命令:
newest_dir=$(printf '%s\n' myproddbserver/* | sort -rn | head -n1)
您也可以在纯 bash 中执行此操作:
newest=0
for d in myproddbserver/*; do
(( d > newest )) && newest=$d
done
newest_files=("myproddbserver/$newest/"*)
printf '%s\n' "${newest_files[@]}"
bash 版本可能较慢,但会处理所有可能的文件名。sort
如果任何文件名包含换行符,该方法将失败。