我使用 Ubuntu 16.04 (xenial) 和 Bash 4.3.48(1) 和zip
3.0。
在包含具有许多不同函数的bash脚本()的文件中#!/bin/bash
,我也有这个函数用于创建一个 zip 文件中的完整数据库备份 + 文档根备份:
imb() {
drt="/var/www/html"
date="$(date +%F-%T)"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" - # Note the hyphen before this comment;
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
rm -f "$drt/db-$date.zip"
}
我获取了上述文件 ( source ~/function.sh
) 并imb
在调试模式下执行 ( set -x
):
系统提示我输入数据库密码,然后过了一段时间(表明已创建数据库备份)。此外,还出现了一个详细的 zip(太长,无法在终端中粘贴或跟踪),表明文档根目录下的所有内容都已被压缩。
但 下没有出现备份/var/www/html/
。
我的问题
由于评论,我觉得我应该问两个问题,我发现它们相似但实际上不同:
zip 将我的文件放在哪里(例如,假设这不是手动创建意义上的“文件创建”
touch
)?当然,由进程创建和位于某处的文件不一定归我的用户所有。我怎样才能找到最后一个文件创建的位置由我当前的用户,位于?
我预计它位于/var/www/html/
:
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
但事实并非如此。我不知道一种有效的方法来知道它是在哪里创建的,而不需要在我的系统的整个文件树上从根(/
)开始运行,因为这可能需要在该机器上花费几个小时。
更新
在写这个问题时,我访问了我的主目录($HOME/
),在那里我找到了该文件,但我不知道为什么它是在那里创建的,而不是在文档根目录下创建的。
答案1
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
在当前目录中创建一个存档,无论该目录是什么(在本例中为您的主目录)。
如果您想在 中创建存档${drt}
,您需要告诉zip
:
zip -r "${drt}/all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
没有简单的方法可以找出任何给定用户创建的最后一个文件的位置;您需要使用时间戳find
并按递减时间戳进行排序。使用上次修改时间作为创建时间的近似值:
find . -user user9303970 -printf "%T@ %p\n" | sort -n -k1,1 -r | head -n 1