关于tar
命令
介绍
例如:
source
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
如果是numbers.tar.gz
通过命令创建文件,那么tar -czf numbers.tar.gz numbers
现在我们有:
source
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
考虑mv numbers.tar.gz target
命令是否被执行,因此我们有:
target
numbers.tar.gz
如果tar -xzf numbers.tar.gz
命令被执行,那么我们有
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
因此,作为一般概述,我们有:
source
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
超越控制
让我们假设以下简单更新:
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222222 content <--- updated
003.txt # with the 333 content
如果目录中的tar -xzf numbers.tar.gz
命令target
被执行因此002.txt
文件被覆盖,所以它的 222222 内容返回到 222。直到这里我没问题。
为了保证新数据的安全或避免不需要的覆盖,可以使用--keep-old-files
和--skip-old-files
选项,根据tar(1) - Linux 手册页,它表示:
-k, --keep-old-files
don't replace existing files when extracting, treat them as errors
--skip-old-files
don't replace existing files when extracting, silently skip over them
因此执行以下两个命令:
tar --keep-old-files -xzf numbers.tar.gz
tar --skip-old-files -xzf numbers.tar.gz
发生以下情况:
- 前者始终显示
tar: numbers/222.txt: Cannot open: File exists
错误消息并且数据保持安全(保留在 222222 中) - 后者什么都不显示 - 如果
v
使用该选项则例外 - 它显示tar: numbers/222.txt: skipping existing file
消息;并且数据保持安全(保留在 222222 中)。用于脚本用途。
到这里为止,一切都很好。
经过研究我找到了这个--keep-newer-files
选项,并再次根据tar(1) - Linux man page,它表明:
--keep-newer-files
don't replace existing files that are newer than their archive copies
因此执行以下命令:
tar --keep-newer-files -xzf numbers.tar.gz
发生以下情况:
- 出现
tar: Current ‘numbers/222.txt’ is newer or same age
消息并且数据保持安全(与 222222 保持一致)
实际上,此--keep-newer-files
选项的作用与--skip-old-files
about 相同,以避免覆盖但显示不同的消息。
问题
- 什么时候强制使用命令的
--keep-newer-files
选项而不是和选项?tar
--keep-old-files
--skip-old-files
我想知道这个选项是强制性的具体情况是什么。
--keep-newer-files
如果您想保留上次修改源文件后在目标上所做的更改,并将目标上的任何旧版本替换为源中的较新版本,则该选项很有用。为了说明这两个选项之间的区别,您需要另一条信息,即每个文件的时间戳。考虑以下:
这些文件被复制以
target
保留它们的时间戳。现在你修复源(观察
001.txt
部分):t2
目标
002.txt
上也有人编辑(观察部分):t3
您创建一个新存档,并将其解压缩到目标上:
001.txt
和002.txt
源中具有相同的内容,丢失对目标所做的更改002.txt
;--keep-old-files
,001.txt
和002.txt
未被提取,并且目标保留其过时版本的001.txt
;--keep-newer-files
,001.txt
被提取并覆盖现有的目标文件,因为现有文件比存档中的文件旧,但002.txt
没有被提取,因为现有文件比存档中的文件新。