2012-06-30 42 views
0

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

我的备份目录:

$:ls 

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

我想,以确定(在文件名通过时间戳)在备份目录中最新的文件,其名称保存到一个变量,然后CP它../ public_html等等......

+0

请参见[BashFAQ/003](http://mywiki.wooledge.org/BashFAQ/003)。 –

回答

1

最新的时间戳文件名应按字母顺序排序。所以你可以使用tail -n1来提取它。

+0

这正是我在这种情况下需要的。谢谢......奇怪的是,这是行不通的:'mostRecentBu = ls $ buDir | tail -n1'错误是'line 92:/srv/www/tmm.toomodernmedia.com/backups:是一个目录' – starsinmypockets

+0

@starsinmypockets:你的失败命令说:“启动'$ buDir | tail -n1'命令,将变量binding'mostRecentBu = ls'添加到环境中,您需要将整个命令(从'='字符向前)放在反引号'\'... \''或$ -parens'$(...)中。 )(这叫做COMMAND SUBSTITUTION)。除了这是不正确的脚本这个事实之外,看到我的答案永远不会失败。 –

2

ls -t将按mtime排序文件。 ls -t | head -n1将选择最新的文件。这与您拥有的任何命名机制无关,这可能会或可能不会成为加分。

+0

这也是一个很好的解决方案,并且在我的情况下可能也会起作用。 。 – starsinmypockets

0

对于不具备换行符自己的名字文件:

2

...和更“正确”的方式,当文件名包含换行符,将不会破裂,也没有的时候有没有匹配的文件(未展开的全局结果)

for newestfile in ./* ; do : ; done 
if test -e "$newestfile"; then do something with "$newestfile" ; fi 
相关问题