আমি জানি কীভাবে একটি নিয়মিত ফাইলের টাইমস্ট্যাম্প পরিবর্তন করতে হয়:
touch -t 201301291810 myfile.txt
আমি একটি সিমলিংক দিয়ে একই করতে সক্ষম ছিল না। এটা কি সম্ভব?
ডিস্ট্রো: আরএইচএল 5.8
আমি জানি কীভাবে একটি নিয়মিত ফাইলের টাইমস্ট্যাম্প পরিবর্তন করতে হয়:
touch -t 201301291810 myfile.txt
আমি একটি সিমলিংক দিয়ে একই করতে সক্ষম ছিল না। এটা কি সম্ভব?
ডিস্ট্রো: আরএইচএল 5.8
উত্তর:
সুইচ -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
। যদি এটি কোনও বিকল্প না হয় এবং আপনি যদি সি জানেন তবে লুটাইমস ফাংশনটি ব্যবহার করে আপনি নিজে এটি করার জন্য একটি ছোট প্রোগ্রাম লিখতে পারেন ।
একটি নিষ্ঠুর বলের উপায় নিম্নরূপ:
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.
প্রতীকী লিঙ্কটির এটাইম এবং এমটাইম lutimes
ফাংশনটি ব্যবহার করে পরিবর্তন করা যেতে পারে । নিম্নলিখিত প্রোগ্রামটি আমার জন্য মেকোএসএক্স এবং লিনাক্সে একটি সালিসী ফাইল থেকে একটি প্রতীকী লিঙ্কে উভয় বার অনুলিপি করতে কাজ করে:
#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
লিঙ্কটি তৈরি করতে কমান্ডটি একই সময় ও এমটাইমের মতো থাকতে file
পারে। অন্য ফাইল থেকে সময় অনুলিপি না করে কমান্ড লাইনে নির্দিষ্ট সময় ব্যবহার করার জন্য প্রোগ্রামটি পরিবর্তন করা খুব কঠিন হওয়া উচিত নয়।