シンボリックリンクのタイムスタンプを変更する


31

通常のファイルのタイムスタンプを変更する方法を知っています:

touch -t 201301291810 myfile.txt

私はシンボリックリンクで同じことをすることができませんでした。出来ますか?

ディストリビューション:RHEL 5.8


2
解決しようとしている問題は何ですか?
mdpc

2
しかし、なぜ....あなたはさらに世界的な問題に取り組んでいますか?これは単なる美学ですか、それとも本当の目的がありますか?
mdpc

7
それは無関係です。私はビジネスロジックに入らない
両生類

5
この種の情報は、私たち全員があなたに役立つソリューションを見つけるのに役立ちます。無関係ではありません。ごめんなさい、とても敏感です、私はただ助けようとしています。
mdpc

4
男、それは無関係です。与えられた定数、不変としてタイムスタンプを変更する必要があるだけです。あなたはそれをあなたが望むすべてに質問することができますが、それは私の終わりには変わりません。これにより、質問は事実上ほとんど役に立たなくなります。幸運
両生類

回答:


45

スイッチ-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:invalid option-h詳細については、「touch --help」を試してください。
両生類

2
「シンボリックリンクのタイムスタンプを変更できるシステムでのみ有用」という引用を見てください。
mdpc

3
また、最近追加されたばかりです(2010年のこのマンページにはありません)。たぶん彼は、coreutilsの最新バージョンを入手する必要があるだけでしょう。ここでは、2009年に追加されたときの差分です
Random832

これが正解である場合は、そのようにマークしてください。
qodeninja

@qodeninja 6年以上後、OPが何らかの形でそれをマークすることは本当に期待していません。
ステファン

3

の最新バージョンが必要になる場合がありtouchます。これがオプションではなく、Cを知っている場合は、lutimes関数を使用して自分で実行する小さなプログラムを作成できます


0

強引な方法は次のとおりです。

 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.

どのシステムがこれを必要としているのでしょうか?ところで、システムの日付をまだ修正していない間に作成されたファイルには、そのタイムスタンプも含まれます
Aquarius Power

一度作成されたシンボリックリンクiノードは変更できないためです。
mdpc 14年

0

シンボリックリンクのatimeとmtimeは、次を使用して変更できます。 lutimes関数。次のプログラムはMacOSXとLinuxで動作し、両方の時間を任意のファイルからシンボリックリンクにコピーします。

#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を使用して、リンクに同じatimeとmtimeを設定fileできます。別のファイルから時刻をコピーするのではなく、コマンドラインで指定された時刻を使用するようにプログラムを変更することはそれほど難しくないはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.