Thay đổi dấu thời gian của một liên kết tượng trưng


31

Tôi biết cách thay đổi dấu thời gian của một tệp thông thường:

touch -t 201301291810 myfile.txt

Tôi đã không thể làm điều tương tự với một liên kết tượng trưng. Có thể không?

Phân phối: RHEL 5,8


2
Vấn đề bạn đang cố gắng giải quyết là gì?
mdpc

2
Nhưng tại sao .... bạn đang cố gắng giải quyết vấn đề toàn cầu nào hơn? Đây chỉ là asthetic, hay nó có một mục đích thực sự?
mdpc

7
điều đó không liên quan tôi sẽ không đi sâu vào logic kinh doanh của mình
lưỡng cư

5
Loại thông tin này giúp tất cả chúng ta có được một giải pháp phù hợp với bạn. Nó không phải là không liên quan. Xin lỗi bạn rất nhạy cảm, tôi chỉ đang cố gắng giúp đỡ.
mdpc

4
anh bạn, nó không liên quan. chỉ cần đi với nhu cầu thay đổi dấu thời gian là một hằng số nhất định, bất biến. bạn có thể hỏi tất cả những gì bạn muốn nhưng nó không thay đổi vào cuối của tôi. mà làm cho các câu hỏi khá nhiều vô dụng, hiệu quả. chúc may mắn
lưỡng cư

Câu trả lời:


45

thêm công tắc -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: tùy chọn không hợp lệ - h Hãy thử `touch --help 'để biết thêm thông tin.
lưỡng cư

2
nhìn vào câu trích dẫn "chỉ hữu ích trên các hệ thống có thể thay đổi dấu thời gian của một liên kết tượng trưng".
mdpc

3
Nó cũng chỉ được thêm vào gần đây (nó không có trong trang này từ năm 2010 ). Có lẽ anh ta chỉ cần có được phiên bản mới nhất của coreutils. Đây là điểm khác biệt khi được thêm vào năm 2009
Random832

Nếu đây là câu trả lời đúng, xin vui lòng đánh dấu nó như vậy.
qodeninja

@qodeninja Sau hơn sáu năm, tôi không thực sự mong đợi OP sẽ đánh dấu nó bằng cách này hay cách khác.
Stephan

3

Bạn có thể cần một phiên bản gần đây hơn touch. Nếu đây không phải là một tùy chọn và nếu bạn biết C, bạn có thể viết một chương trình nhỏ để tự thực hiện bằng chức năng lutimes .


0

Một cách vũ phu như sau:

 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.

làm tôi tò mò, hệ thống nào đòi hỏi điều này? btw, bất kỳ tệp nào được tạo trong khi bạn chưa sửa ngày sytem cũng sẽ có dấu thời gian đó
Aquarius Power

Bởi vì người ta không thể sửa đổi inode symlink một khi được tạo.
mdpc

0

Thời gian và thời gian của một liên kết tượng trưng có thể được thay đổi bằng cách sử dụng lutimeschức năng. Chương trình sau đây hoạt động với tôi trên MacOSX và Linux để sao chép cả hai lần từ một tệp tùy ý sang một liên kết tượng trưng:

#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;
}

Nếu bạn gọi tệp đã biên dịch copytime, thì lệnh copytime file linkcó thể được sử dụng để tạo liên kết có cùng thời gian và thời gian file. Không nên quá khó để sửa đổi chương trình để sử dụng thời gian được chỉ định trên dòng lệnh thay vì sao chép thời gian từ tệp khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.