0

我正在编写一个将时间戳备份文件保存到备份目录的部署脚本。我想做一个回滚实现,可以回滚到最新的文件。

我的备份目录:

$:ls

.              1341094065_public_html_bu  1341094788_public_html_bu
..             1341094390_public_html_bu
1341093920_public_html_bu  1341094555_public_html_bu

我想在备份目录中识别最新的文件(通过文件名中的时间戳),并将其名称保存到变量中,然后将其 cp 到 ../public_html,依此类推...

4

4 回答 4

2

ls -t将按 mtime 对文件进行排序。 ls -t | head -n1将选择最新的文件。这与您拥有的任何命名方案无关,这可能是一个加号,也可能不是一个加号。

于 2012-06-30T22:38:14.943 回答
2

...以及一种更“正确”的方式,当文件名包含换行符时不会中断,也不会在没有匹配文件时中断(未扩展的 glob 结果)

for newestfile in ./* ; do : ; done
if test -e "$newestfile"; then do something with "$newestfile" ; fi
于 2012-07-01T00:20:31.247 回答
1

带有最新时间戳的文件名应按字母顺序排在最后。因此,您可以使用tail -n1它来提取它。

于 2012-06-30T22:36:34.450 回答
0

对于名称中没有换行符的文件:

shopt -s nullglob
printf '%s\n' "$buDir"/* | tail -n 1
于 2012-06-30T23:52:21.387 回答