我有一个 .tar 文件,每天晚上都会由我们的一个客户管理系统传输到我们的服务器。该文件是一个压缩的 .sql 文件,我需要将其解压并转储到我们的数据库中。
.tar 文件的目录是/root/backups/premvet_sync/2012.07.17.10.09.19
。如您所见,目录是文件上传到我们服务器的时间戳。
我正在尝试创建一个 cron 作业,将 CD 放入目录,然后解压缩它。我通常使用的命令如下:
cd /root/backups/premvet_sync/2012.07.17.10.09.19 && tar -xvf backupfile.tar
显然,该命令只会运行一次(当时间戳与 cron 作业路径匹配时)。我可以做什么来 CD 进入最新目录?
如果有任何区别的话,服务器正在运行 Ubuntu 10.04 LTS。
更新
对于任何感兴趣的人,这里是最终的(有效的) bash 脚本。
#!/bin/sh
# Untar backup database and dump into local mysql server.
echo "Finding latest backup directory"
dir=$(ls -td1 /root/backups/backup/* | head -1)
echo "Opening latest backup directory"
cd $dir
echo "Uncompress backup
tar -xvf backup.tar
echo "Dig down into correct directory"
cd $dir/backup/databases/MySQL
echo "mysqldump the compressed database file"
gunzip < backup.sql.gz | mysql -u USERNAME -pPASSWORD restore_db_name
echo "Done."
答案1
您可以使用ls -t
按最新的第一顺序列出内容/root/backups/premvet_sync/
,然后将其传递给 head 以获取第一行
dir=$(ls -td1 /root/backups/premvet_sync/* | head -1)
将投入/root/backups/premvet_sync/2012.07.17.10.09.19
,$dir
这样你就可以
cd $dir
- -t 按修改时间排序
- -1 每行列出一个文件
- -d 列出目录条目而不是内容,...
答案2
DATE=`date +%Y%m%d-%H%M%S`
mkdir -p /some/dir/$DATE
cd /some/dir/$DATE
ETC