Bir sembolik bağın zaman damgasını değiştirme


31

Normal bir dosyanın zaman damgasını nasıl değiştireceğimi biliyorum:

touch -t 201301291810 myfile.txt

Aynı şeyi bir sembolik bağlantıyla yapamadım. Mümkün mü?

Dağıtım: RHEL 5.8


2
Çözmeye çalıştığınız sorun nedir?
mdpc

2
Ama neden .... Hangi küresel problemi ele almaya çalışıyorsun? Bu sadece astetik mi, yoksa gerçek bir amacı var mı?
mdpc

7
bu alakasız. benim iş mantığı içine gitmiyorum
amphibient

5
Bu tür bilgiler, sizin için işe yarayacak bir çözüme ulaşmamıza yardımcı olur. Bu ilgisiz değil. Üzgünüm çok duyarlısın, sadece yardım etmeye çalışıyorum.
mdpc

4
dostum, bu alakasız. sadece zaman damgasını belirli bir sabit, değişmez olarak değiştirme ihtiyacını giderin. İstediğin her şeyi sorgulayabilirsin ama benim tarafımdan değişmiyor. Bu da sorgulamayı etkili bir şekilde gereksiz kılar. iyi şanslar
amfibi

Yanıtlar:


45

anahtar ekle -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: geçersiz seçenek - h Daha fazla bilgi için `touch --help 'komutunu deneyin.
amfi

2
"sadece bir sembolik bağın zaman damgasını değiştirebilecek sistemlerde yararlı" alıntılarına bakın.
mdpc

3
Sadece son zamanlarda eklendi ( 2010'dan itibaren bu sayfada bulunmamaktadır ). Belki de sadece coreutils'in son versiyonunu öğrenmesi gerekiyor. İşte ne zaman 2009 yılında eklendiği fark
Random832

Bu doğru cevap ise, lütfen bu şekilde işaretleyin.
qodeninja

@ qodeninja Altı yıldan fazla bir zaman sonra, OP'nin bir şekilde ya da diğerini işaretlemesini beklemiyorum.
Stephan,

3

Daha yeni bir sürümüne ihtiyacınız olabilir touch. Bu bir seçenek değilse ve C'yi biliyorsanız, lutimes işlevini kullanarak kendiniz yapmak için küçük bir program yazabilirsiniz .


0

Bir kaba kuvvet yolu aşağıdaki gibidir:

 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.

beni meraklandırdı, hangi sistemi gerektirir? btw, sistem tarihini henüz ayarlamadıysanız, oluşturulan herhangi bir dosyada bu zaman damgası da olacaktır
Aquarius Power

Çünkü biri bir kez oluşturulan sembolik bağlantıyı değiştiremez.
mdpc

0

Sembolik bir bağlantının atime ve mtime lutimesişlevi kullanılarak değiştirilebilir . Aşağıdaki program keyfi bir dosyadan sembolik bir bağlantıya iki kere kopyalamak için MacOSX ve Linux'ta çalışıyor:

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

Derlenmiş dosyayı çağırırsanız, copytimekomut copytime file link, bağlantının aynı zaman ve mtime değerine sahip olmasını sağlamak için kullanılabilir file. Programı başka bir dosyadan kopyalamak yerine, komut satırında belirtilen zamanları kullanacak şekilde değiştirmek çok zor olmamalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.