Linux如何复制符号链接和保存日期



我有一个目录,里面有这样的文件:

  0 lrwxrwxrwx  1 utges_m gid36     12 May 17  2011 libedit.so -> libedit.so.2
  0 lrwxrwxrwx  1 utges_m gid36     16 Apr 16  2009 libedit.so.2 -> libedit.so.2.0.9
352 -rw-r--r--  1 utges_m gid36 358958 Mar 10  2010 libedit.so.2.0.9

我想复制文件和符号链接,并保留日期。

我从这个命令开始:

  cp -dp sourceDir/* destinationDir

,结果是:

  0 lrwxrwxrwx  1 siri gid33     12 Jul  9 16:38 libedit.so -> libedit.so.2
  0 lrwxrwxrwx  1 siri gid33     16 Jul  9 16:38 libedit.so.2 -> libedit.so.2.0.9
356 -rw-r--r--  1 siri gid33 358958 Mar 10  2010 libedit.so.2.0.9
所以,我写了这个简单的bash脚本:
 cp -dp $OLDDIR/* $NEWDIR
 ls $OLDDIR | while read f; do {
    TS=$(stat -c '%Y' "$OLDDIR/$f")
    DATE=$(date -d "UTC 1970-01-01 $TS secs")
    echo "$f  $DATE"
    touch -d "${DATE}" "$NEWDIR/$f"
 } done;

脚本输出为:

 libedit.so  Tue May 17 21:35:14 CEST 2011
 libedit.so.2  Thu Apr 16 10:30:05 CEST 2009
 libedit.so.2.0.9  Wed Mar 10 16:31:17 CET 2010

但不幸的是结果是:

  0 lrwxrwxrwx  1 siri gid33     12 Jul  9 16:55 libedit.so -> libedit.so.2
  0 lrwxrwxrwx  1 siri gid33     16 Jul  9 16:55 libedit.so.2 -> libedit.so.2.0.9
356 -rw-r--r--  1 siri gid33 358958 Mar 10  2010 libedit.so.2.0.9

我做错了什么?

我使用的是Red Hat Enterprise Linux ES release 4 (Nahant Update 3)

您的系统可能不支持更改符号链接的时间戳,因为cp -dp 应该已经开始工作了。

另外,如果您确实使用 touch ,您必须添加(GNU touch) -h选项以链接而不是其目标:

来自man touch -注意括号中的语句:

<>之前- h, no-dereference影响每个符号链接,而不是任何引用文件(仅对可以更改符号链接的时间戳的系统有用)之前

尝试touch -h <someSymlink>; ls -l <someSymlink>看看它是否在原则上工作

您可以使用rsync:

rsync -av /folder/ /newfolder/

的例子:

mkdir folder; ln -s /etc/hosts /tmp/folder/testfile
rsync -av /tmp/folder/ /tmp/newfolder/
sending incremental file list
created directory /tmp/newfolder
./
testfile -> /etc/hosts
sent 75 bytes  received 18 bytes  186.00 bytes/sec
total size is 10  speedup is 0.11
ls -l /tmp/folder/ 
total 0
lrwxrwxrwx 1 tiago tiago 10 Jul  9 16:44 testfile -> /etc/hosts
ls -l /tmp/newfolder/ 
total 0
lrwxrwxrwx 1 tiago tiago 10 Jul  9 16:44 testfile -> /etc/hosts

为什么要这么辛苦呢?你需要的是cp -a。例如,在~/lib中我有:

lrwxrwxrwx   1 david david    13 May 28 05:59 libetf.so -> libetf.so.1.0
lrwxrwxrwx   1 david david    13 May 28 05:59 libetf.so.1 -> libetf.so.1.0
-rwxr-xr-x   1 david david  8512 May 28 05:59 libetf.so.1.0

复制并保存日期:

$ md lib2
$ cp -a lib/libetf* lib2
$ ls -al lib2
total 28
drwxr-xr-x   2 david david  4096 Jul  9 11:13 .
drwxr-xr-x 110 david david 12288 Jul  9 11:13 ..
lrwxrwxrwx   1 david david    13 May 28 05:59 libetf.so -> libetf.so.1.0
lrwxrwxrwx   1 david david    13 May 28 05:59 libetf.so.1 -> libetf.so.1.0
-rwxr-xr-x   1 david david  8512 May 28 05:59 libetf.so.1.0

最新更新