我有一个文件列表
- backups/
- backup.2017-08-28.zip
- backup.2017-08-29.zip
- backup.2017-09-2.zip
我希望能够将最近的内容上传回服务器,我可以使用命令:
dobackup ~/backups/backup.2017-09-2.zip
我的问题是:在.sh
文件中(因此我可以为此启动自动/ cron作业)如何获取最新文件名然后运行该命令?< / p>
限制:我必须使用文件名上的日期而不是修改元数据。
答案 0 :(得分:1)
添加更多文件:
backup.2017-08-28.zip
backup.2017-08-29.zip
backup.2017-09-10.zip
backup.2017-09-2.zip
backup.2017-09-28.zip
backup.2017-09-3.zip
这样的事情怎么样,虽然被授予,但有点费解:
ls -1 backup*zip | sed 's/-\([1-9]\)\./-0\1\./g' | sort [-r] | sed 's/-0\([1-9]\)\./-\1\./g'
sed
正在寻找像-[0-9].
\(
和\)
指定我们要在替换部分中引用的模式-0\1.
,其中\1
是对转义/匹配的parens中包含的第一个模式的引用(即,\1
将替换为匹配的单个数字[0-9]
).
)已转义,以确保将其作为文字句点处理,而不会被视为单位置通配符ls/sed
构造已生成一个包含2位数天的文件列表sort
(或sort -r
)sed
以转换回以0
head
或tail
根据您使用的sort
/ sort -r
针对示例文件运行:
$ ls -1 backup*zip | sed 's/-\([1-9]\)\./-0\1\./g' | sort | sed 's/-0\([1-9]\)\./-\1\./g'
backup.2017-08-28.zip
backup.2017-08-29.zip
backup.2017-09-2.zip
backup.2017-09-3.zip
backup.2017-09-10.zip
backup.2017-09-28.zip
# reverse the ordering
$ ls -1 backup*zip | sed 's/-\([1-9]\)\./-0\1\./g' | sort -r | sed 's/-0\([1-9]\)\./-\1\./g'
backup.2017-09-28.zip
backup.2017-09-10.zip
backup.2017-09-3.zip
backup.2017-09-2.zip
backup.2017-08-29.zip
backup.2017-08-28.zip
答案 1 :(得分:1)
您可以在由dot:
分隔的第二个字段上对其进行排序printf '%s\n' backup.* | sort -t '.' -k2,2r | head -1
backup.2017-09-2.zip