Mengubah cap waktu symlink

31

Saya tahu cara mengubah stempel waktu dari file biasa:

touch -t 201301291810 myfile.txt

Saya tidak dapat melakukan hal yang sama dengan symlink. Apa itu mungkin?

Distro: RHEL 5.8

amfibi
sumber
2
Apa masalah yang Anda coba selesaikan?
mdpc
2
Tapi mengapa ... masalah global apa lagi yang ingin Anda atasi? Apakah ini hanya astetik, atau apakah itu memiliki tujuan nyata?
mdpc
7
itu tidak relevan. saya tidak masuk ke logika bisnis saya
amfibi
5
Jenis informasi ini membantu kita semua untuk mendapatkan solusi yang sesuai untuk Anda. Itu tidak irreleveant. Maaf Anda sangat sensitif, saya hanya berusaha membantu.
mdpc
4
Bung, itu tidak relevan. hanya pergi dengan kebutuhan untuk mengubah cap waktu sebagai konstanta yang diberikan, tidak berubah-ubah. Anda dapat mempertanyakan semua yang Anda inginkan tetapi tidak berubah pada saya. yang membuat pertanyaan itu tidak berguna, efektif. semoga sukses
amfibi

Jawaban:

45

tambahkan switch -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
Stephan
sumber
> touch -h -t 201301291810 mysymlink -> touch: opsi tidak valid - h Coba `touch --help 'untuk informasi lebih lanjut.
amfibi
2
lihat kutipan "berguna hanya pada sistem yang dapat mengubah cap waktu symlink".
mdpc
3
Itu juga hanya ditambahkan baru-baru ini (tidak ada dalam halaman ini dari 2010 ). Mungkin dia hanya perlu mendapatkan versi terbaru dari coreutils. Inilah perbedaannya ketika ditambahkan pada 2009
Random832
Jika ini adalah jawaban yang benar, harap tandai sebagai itu.
qodeninja
@qodeninja Setelah lebih dari enam tahun, saya tidak benar-benar berharap OP untuk menandainya.
Stephan
3

Anda mungkin memerlukan versi yang lebih baru touch. Jika ini bukan opsi, dan jika Anda tahu C, Anda bisa menulis sebuah program kecil untuk melakukannya sendiri menggunakan fungsi lutimes .

Random832
sumber
0

Cara brute force adalah sebagai berikut:

 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.
mdpc
sumber
membuat saya penasaran, sistem apa yang membutuhkan ini? btw, file apa pun yang dibuat saat Anda belum memperbaiki tanggal sistem juga akan memiliki stempel waktu itu
Aquarius Power
Karena seseorang tidak dapat memodifikasi inode symlink setelah dibuat.
mdpc
0

Batas dan waktu tautan simbolis dapat diubah menggunakan lutimesfungsi. Program berikut ini berfungsi untuk saya di MacOSX dan Linux untuk menyalin dua kali dari file sewenang-wenang ke tautan simbolis:

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

Jika Anda memanggil file yang dikompilasi copytime, maka perintah tersebut copytime file linkdapat digunakan untuk membuat tautan memiliki atime dan mtime yang sama seperti filehalnya. Seharusnya tidak terlalu sulit untuk memodifikasi program untuk menggunakan waktu yang ditentukan pada baris perintah daripada menyalin waktu dari file lain.

Jochen
sumber