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
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
Yanıtlar:
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
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 .
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.
Sembolik bir bağlantının atime ve mtime lutimes
iş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, copytime
komut 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.