我在备份shell脚本中有以下命令:

tar -cjf site1.bz2 /var/www/site1/

当我列出档案的内容时,我得到:

tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html

但我想从归档文件中的目录和文件名中删除第/var/www/site1部分,以简化提取并避免无用的常量目录 struct .不知道,以防我在一个网站数据不存储在/var/www下的地方提取备份网站.

对于上面的例子,我希望:

tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html

所以,当我提取时,文件被提取到当前目录中,之后我不需要移动提取的文件,这样子目录 struct 就被保留了.

关于tar和backuping在stackoverflow和其他网站上已经有很多问题,但大多数问题都要求删除整个子目录 struct (扁平化),或者只是添加或删除名称中的首字母/而已(我不知道提取时它会发生什么变化),但仅此而已.

在阅读了这里和那里找到的一些解决方案以及手册后,我try :

tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/

但他们都没有按照我想要的方式工作.有些什么都不做,有些不再归档子目录.

它在一个由Cron启动的备份shell脚本中,所以我不太清楚,哪个用户运行它,路径是什么,当前目录是什么,所以任何事情都需要始终写入绝对路径,并且更愿意不更改当前目录,以避免进一步 destruct 脚本中的内容(因为它不仅备份网站,还备份数据库,然后将所有内容发送到FTP等)

如何做到这一点?

我是否误解了选项C的工作原理?

推荐答案

tar -cjf site1.tar.bz2 -C /var/www/site1 .

在上面的例子中,tar在执行它的操作之前将更改为目录/var/www/site1,因为给出了选项-C /var/www/site1.

man tar开始:

OTHER OPTIONS

  -C, --directory DIR
       change to directory DIR

Linux相关问答推荐

在PowerShell for Linux上,打印出的maven命令还有其他字符

为什么仅使用&i-i标志时仍会从容器进程中输出

UTF-8输入和使用XGetICValues

将十六进制文件名转换为十进制

将(覆盖)文件移动到不同位置的同名文件夹中

如何在 gcc 搜索路径上防止多个版本的 Boost?

将特定列转换为行

使用具有特定值的字段对文件进行排序

根据外部请求在 Netbeans 中启动 XDebug

ld-linux.so.2 和 linux-gate.so.1 是什么?

sed: -i 不能与 Mac OS X 上的标准输入一起使用

未找到框架.NETFramework,Version=v4.7.1的参考程序集

如何从任意 pthread_t 获取线程 ID?

./studio.sh 之后的 Android Studio 错误

使用sudo apt-get install build-essentials

限制程序在 Linux 中运行的时间

conda 命令会提示错误:Bad Interpreter: No such file or directory

在 reverse-i-search (Ctrl+R ) , 历史上类似命令之间切换的任何方法

带有日期和时间的 Linux 命令历史记录

如何使用cp从不同目录复制多个文件?