ファイルの更新日時を2日後に変更する

あまり、需要のある操作ではないですが、ファイルの更新日時を現在の更新日時の2日後に変更するということを、zshとunixコマンドの範囲でやってみました。(環境はcygwinで作業しました)

ファイルの日付を取得する
$ ls -l --time-style=long-iso filename | awk '{print $6 " " $7;}'

もっと良い方法がありそうだけど、awkで切りだしました。cutの方がよかったかな?

2日後の日付を取得する
$ date  --date '2007-12-28 12:41 2days'  --rfc-3339=seconds

–dateオプションに、元の日付と ‘2days’を繋げて指定すると、2日後の日付になるようです。 –rfc-3339=secondsは、出力形式の指定です。

更新日時を更新する
$ touch -d '2007-12-30 12:41:00+09:00' filename

これは普通に

これらを組み合わせて、カレントディレクトリ配下の全てのファイルの更新日時を2日後に変更する

$ foreach f in $(find . -type f)
>   touch -d "$(date --date "$(ls -l --time-style=long-iso $f | awk '{print $6 " " $7;}') 2days" --rfc-3339=seconds)" $f
> end

結論

perlでやった方が簡単だと思う。

2 Comments

  • touch って、空ファイル作る為だけに使ってたんですが、
    本来はタイムスタンプ変更のコマンドなんですよね。。。

  • ども、id:momiage3dauさん
    ファイルの更新日時を変更したい場面が少ないからね。操作手順の中に、touchが出てくる時は決まって空ファイル作成のためだし。unixのコマンドには、先人の知恵が詰っているから、ふと興味深いなと思うことは多いですね。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.