假设我有一个具有以下目录结构的源目录:
+-- rootfs
| +-- bin
| | +-- cat
| | +-- chmod
| | +-- cp
| | +-- ls
| | +-- echo
| | +-- grep
| +-- usr
| | +-- bin
| | | +-- a
| | | +-- b
| | | +-- c
| +-- lib
| | +-- libc.so.6
| | +-- libssl.so.0.9.8
| | +-- libcrypto.so.1.0.0
| +-- tmp
| +-- mnt
其中第二级中的所有文件都是目录(bin、usr、lib、mnt、tmp)
我需要将此目录复制到我的目的地。所以,我这样做:
cp -r /path/to/source/rootfs /path/to/destination/
现在,假设我从其他地方将两个新文件复制到此目录结构(在目标中),所以现在看起来像
+-- rootfs
| +-- bin
| | +-- cat
| | +-- chmod
| | +-- cp
| | +-- ls
| | +-- echo
| | +-- grep
| | +-- **mke2fs**
| | +-- **e2fsck**
| +-- usr
| | +-- bin
| | | +-- a
| | | +-- b
| | | +-- c
| +-- lib
| | +-- libc.so.6
| | +-- libssl.so.0.9.8
| | +-- libcrypto.so.1.0.0
| | +-- **libm.so.6**
| | +-- **librt.so.1**
| +-- tmp
| +-- mnt
此时,如果我再次将源目录复制到目标目录,我在目标文件夹中创建的新文件将保持原样。
cp -r /path/to/source/rootfs /path/to/destination
源目录中所有文件的修改时间都已更新为第二个副本的时间,这是有意义的。
bin 目录的修改时间会更新为第二个副本的时间,而 lib 目录的修改时间则不会,我并没有真正得到这一点 - 因为这两个目录都有新文件。
这让我想知道 - linux 复制命令是如何工作的,以及它如何更新文件夹的修改时间?
答案1
更改目录 mtime 的唯一原因cp -r
是源目录中的文件在目标目录中丢失。
你可以检查发生了什么
cp -ruv /path/to/source/rootfs/. /path/to/destination