
フォルダをgzipで圧縮し、フォルダの元のタイムスタンプも保存したいと思います。誰でも解決策を提案できますか?
以下のコードを試してみました。 zipが発生した時点のタイムスタンプを取得します。
tar -zcvf outputFileName folderToCompress
答え1
いくつかあります。他のタイムスタンプ一般的なUNIXファイルシステムではatime
、、、mtime
。ctime
どちらを維持しますか?
mtime
維持(作業の実行時に表示される内容)に興味がある場合、ls -l
これは既に次のようにデフォルトで機能します。
$ date
Wed Dec 2 08:52:36 CET 2020
$ tar --version
tar (GNU tar) 1.32
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.
$ find /usr/share/tasksel/ -exec ls -lhad {} +
drwxr-xr-x 3 root root 4.0K Nov 6 2017 /usr/share/tasksel/
drwxr-xr-x 2 root root 4.0K Nov 20 12:21 /usr/share/tasksel/descs
-rw-r--r-- 1 root root 7.9K Nov 14 16:06 /usr/share/tasksel/descs/debian-multimedia-tasks.desc
-rw-r--r-- 1 root root 21K Nov 18 02:40 /usr/share/tasksel/descs/debian-tasks.desc
$ cd /tmp; rm -rf foo.tgz
$ tar czf foo.tgz /usr/share/tasksel/
tar: Removing leading '/' from member names
$ ls -lhan foo.tgz
-rw-r--r-- 1 1000 1000 4.6K Dec 2 08:54 foo.tgz
$ tar tvf foo.tgz
drwxr-xr-x root/root 0 2017-11-06 09:45 usr/share/tasksel/
drwxr-xr-x root/root 0 2020-11-20 12:21 usr/share/tasksel/descs/
-rw-r--r-- root/root 20596 2020-11-18 02:40 usr/share/tasksel/descs/debian-tasks.desc
-rw-r--r-- root/root 8033 2020-11-14 16:06 usr/share/tasksel/descs/debian-multimedia-tasks.desc
$ tar xf foo.tgz
$ find /tmp/usr/share/tasksel/ -exec ls -lhadn {} +
drwxr-xr-x 3 1000 1000 4.0K Nov 6 2017 /tmp/usr/share/tasksel/
drwxr-xr-x 2 1000 1000 4.0K Nov 20 12:21 /tmp/usr/share/tasksel/descs
-rw-r--r-- 1 1000 1000 7.9K Nov 14 16:06 /tmp/usr/share/tasksel/descs/debian-multimedia-tasks.desc
-rw-r--r-- 1 1000 1000 21K Nov 18 02:40 /tmp/usr/share/tasksel/descs/debian-tasks.desc
ご覧のとおり、すべてのフォルダとファイルのタイムスタンプはtarball(コマンド実行時)とextractおよびInspectionを使用するときにtar tvf
保存されます。これまでは、抽出されたファイルの(修正)タイムスタンプが元のファイルのタイムスタンプ(「2017年11月および2020年11月」)と一致し、異なるため「保存」されました。tar xf
ls -l
現在の時間(「2020年12月」)。
他の結果が出ると、タイムスタンプの確認方法に欠陥がある可能性が高くなります。または、抽出したファイルシステムでタイムスタンプを変更することはできません。
答え2
tarball自体がアーカイブされたディレクトリと同じタイムスタンプを持つことを望むなら、これにはオプションはありませんが、実際にはそうすることtar
ができます:
touch -r folderToCompress outputFileName