การเปลี่ยนเวลาประทับของ symlink


31

ฉันรู้วิธีเปลี่ยนการประทับเวลาของไฟล์ปกติ:

touch -t 201301291810 myfile.txt

ฉันไม่สามารถทำเช่นเดียวกันกับ symlink มันเป็นไปได้?

Distro: RHEL 5.8


2
ปัญหาที่คุณพยายามแก้ไขคืออะไร
mdpc

2
แต่ทำไม .... ปัญหาระดับโลกที่คุณพยายามจัดการ นี่เป็นแค่เรื่องของความ asthetics หรือว่ามันมีจุดประสงค์ที่แท้จริง?
mdpc

7
ที่ไม่เกี่ยวข้อง ฉันจะไม่เข้าสู่ตรรกะทางธุรกิจของฉัน
สัตว์สะเทินน้ำสะเทินบก

5
ข้อมูลประเภทนี้ช่วยให้พวกเราทุกคนได้รับโซลูชั่นที่เหมาะกับคุณ มันไม่เกี่ยวข้อง ขออภัยคุณไวมากฉันแค่พยายามช่วย
mdpc

4
เพื่อนมันไม่เกี่ยวข้อง เพียงแค่ไปกับความจำเป็นในการเปลี่ยนการประทับเวลาเป็นค่าคงที่ที่กำหนดคงที่ คุณสามารถถามมันทั้งหมดที่คุณต้องการ แต่มันจะไม่เปลี่ยนแปลงในตอนท้ายของฉัน ซึ่งทำให้การตั้งคำถามค่อนข้างไร้ประโยชน์อย่างมีประสิทธิภาพ ขอให้โชคดี
สัตว์สะเทินน้ำสะเทินบก

คำตอบ:


45

เพิ่มสวิตช์ -h

touch -h -t 201301291810 myfile.txt

Mandatory arguments to long options are mandatory for short options too.
  -a                     change only the access time
  -c, --no-create        do not create any files
  -d, --date=STRING      parse STRING and use it instead of current time
  -f                     (ignored)
  -h, --no-dereference   affect each symbolic link instead of any referenced
                         file (useful only on systems that can change the
                         timestamps of a symlink)
  -m                     change only the modification time
  -r, --reference=FILE   use this file's times instead of current time
  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time

> touch -h -t 201301291810 mysymlink -> touch: ตัวเลือกที่ไม่ถูกต้อง - h ลอง `touch --help 'สำหรับข้อมูลเพิ่มเติม
สัตว์สะเทินน้ำสะเทินบก

2
ดูที่เครื่องหมายคำพูด "มีประโยชน์เฉพาะกับระบบที่สามารถเปลี่ยนการประทับเวลาของ symlink"
mdpc

3
มันเพิ่งถูกเพิ่มเข้ามาเมื่อไม่นานมานี้ (ไม่ใช่ในmanpage นี้ตั้งแต่ปี 2010 ) บางทีเขาอาจต้องการรับ coreutils เวอร์ชันล่าสุด นี่คือความแตกต่างของเมื่อมีการเพิ่มในปี 2009
Random832

หากนี่คือคำตอบที่ถูกต้องโปรดทำเครื่องหมายเช่นนั้น
qodeninja

@ qodeninja หลังจากผ่านไปหกปีฉันไม่ได้คาดหวังให้ OP ทำเครื่องหมายทางเดียวหรืออย่างอื่น
เตฟาน

3

touchคุณอาจจะต้องมีรุ่นใหม่กว่า ถ้าไม่ได้เป็นตัวเลือกและถ้าคุณรู้ว่า C, คุณสามารถเขียนโปรแกรมขนาดเล็กที่จะทำมันด้วยตัวคุณเองโดยใช้ฟังก์ชั่น lutimes


0

วิธีการดุร้ายกำลังดังต่อไปนี้:

 0. delete the old symlink you wish to change     
 1. change the system date to whatever date you want the symlink to be
 2. remake the symlink
 3. return the system date to current.

ทำให้ฉันอยากรู้อยากเห็นสิ่งที่ระบบนี้ต้องการหรือไม่ btw ไฟล์ใด ๆ ที่สร้างขึ้นในขณะที่คุณยังไม่ได้แก้ไขวันที่ sytem จะมีการประทับเวลานั้นด้วย
Aquarius Power

เนื่องจากไม่สามารถแก้ไข symlink inode เมื่อสร้างขึ้นแล้ว
mdpc

0

สามารถเปลี่ยน atime และ mtime ของลิงก์สัญลักษณ์ได้โดยใช้lutimesฟังก์ชัน โปรแกรมต่อไปนี้ใช้ได้กับฉันบน MacOSX และ Linux เพื่อคัดลอกทั้งสองครั้งจากไฟล์ที่กำหนดเองไปยังลิงก์สัญลักษณ์:

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>

int
main(int argc, char **argv)
{
    struct timeval times[2];
    struct stat info;
    int rc;

    if (argc != 3) {
        fprintf(stderr, "usage: %s source target\n", argv[0]);
        return 1;
    }
    rc = lstat(argv[1], &info);
    if (rc != 0) {
        fprintf(stderr, "error: cannot stat %s, %s\n", argv[1],
                strerror(errno));
        return 1;
    }

    times[0].tv_sec = info.st_atime;
    times[0].tv_usec = 0;
    times[1].tv_sec = info.st_mtime;
    times[1].tv_usec = 0;
    rc = lutimes(argv[2], times);
    if (rc != 0) {
        fprintf(stderr, "error: cannot set times on %s, %s\n", argv[2],
                strerror(errno));
        return 1;
    }

    return 0;
}

หากคุณเรียกไฟล์ที่คอมไพล์copytimeคำสั่งcopytime file linkนั้นสามารถใช้เพื่อทำให้ลิงก์มี atime และ mtime เหมือนfileกัน ไม่ควรยากเกินไปในการปรับเปลี่ยนโปรแกรมให้ใช้เวลาที่ระบุในบรรทัดคำสั่งแทนที่จะคัดลอกเวลาจากไฟล์อื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.