我有以下目录结构:
/home/
|__dirA/
|__ dir_to_zip/
|__ file1.txt
|__ file2.txt
|__ ...
|__dirB/
|__ dir_to_save_in/
|__dirC/
backup_zip_script.sh
backup_zip_script.sh
包含(除其他外)命令(src):
tar -czvf /home/dirB/dir_to_save_in/backup.tar.gz /home/dirA/dir_to_zip
也就是说:我希望压缩目录~/dirA/dir_to_zip
,将压缩的存档保存在 中~/dirB/dir_to_save_in/
,并使用位于 中的脚本来执行此操作~/dirC/
。
上面的命令tar
可以工作,但是解压缩保存的存档会产生完整的目录结构:
/home/
|__dirA/
|__ dir_to_zip/
|__ file1.txt
|__ file2.txt
|__ ...
当我只想:
dir_to_zip/
|__ file1.txt
|__ file2.txt
|__ ...
如何将目录压缩到另一个位置(这样我就必须指定完整的绝对路径),但只压缩该目录而不压缩它之前的所有级别?
我也可以简单地使用cd /home/dirA/ && tar...
...但我更愿意看看是否还存在其他解决方案。
答案1
正如在评论,如果您的实现支持,请使用-C
“更改到目标目录”选项:tar
tar -czvf /home/dirB/dir_to_save_in/backup.tar.gz -C /home/dirA dir_to_zip
提取存档时也可以使用此选项,例如
tar -xzvf /home/dirB/dir_to_save_in/backup.tar.gz -C /home/dirA
将存档的内容提取到/home/dirA
.
答案2
如果您的目录结构是一致的或者您以编程方式执行此操作,则可以使用选项--strip-components=<#>
where<#>
是在提取之前要删除的文件名路径的元素数量。