Bash ファイルの更新日時(mtime)や作成日時(ctime)を変更する

    >


ファイルの更新時刻をファイルへの書き込みやアクセスなしで行いたい場合があります。

と言っても、ファイルの更新をprintfやechoで行うことはできないっぽいですので、文字を加えて削除するとか面倒なことをしない限りは今回説明する方法を取ったほうが良さそうです。

# ファイルに改行が追加されてしまう
echo "" >> "${TIME_MANAGEMENT_DIR}/time_management.txt"


# ファイルに変更は加えられないが、更新日時も変更されない。
printf "" >> "${TIME_MANAGEMENT_DIR}/time_management.txt"

まずはstatでファイルの現在の更新日時やアクセス日時を確認してみます。

$stat  "${TIME_MANAGEMENT_DIR}/time_management.txt"
  File: '/mnt/c/time_management/time_management.txt'
  Size: 385             Blocks: 0          IO Block: 4096   regular file
Device: 11h/17d Inode: 336362597169482697  Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    yuis)   Gid: ( 1000/    yuis)
Access: 2019-06-29 14:59:40.666044600 +0900
Modify: 2019-06-29 14:59:40.666044600 +0900
Change: 2019-06-29 14:59:40.666044600 +0900

アクセス日時の変更をするには、touch -aを使用します。

$ /bin/touch -a --date="@1561788231" "${TIME_MANAGEMENT_DIR}/time_management.txt"

# // `1561788231` ... `date +%s`
$ /bin/touch --help
-a                     change only the access time
-d, --date=STRING      parse STRING and use it instead of current time
-m                     change only the modification time

変わりましたね。

$ stat "${TIME_MANAGEMENT_DIR}/time_management.txt"
  File: '/mnt/c/time_management/time_management.txt'
  Size: 385             Blocks: 0          IO Block: 4096   regular file
Device: 11h/17d Inode: 336362597169482697  Links: 1
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    yuis)   Gid: ( 1000/    yuis)
Access: 2019-06-29 15:03:51.000000000 +0900
Modify: 2019-06-29 14:59:40.666044600 +0900
Change: 2019-06-29 15:04:49.266605100 +0900
 Birth: -

上記と同様に、更新日時はtouch -mを使用します。

/bin/touch -m --date="@$( date +%s )" "${TIME_MANAGEMENT_DIR}/time_management.txt" 

Linux – Fake File Access, Modify and Change TimeStamps – ShellHacks




お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu