作成時間が含まれていることを理解する-a
ために、いくつかのディレクトリをコピーしました。preserve=all
cp -a ./* /mnt/destination/
ターゲットの結果ディレクトリを確認すると、生成時間が現在時刻に設定され、そしてその内容は創作当時を保存するようです。
なぜ作成日ではないのですか?トップレベルディレクトリは保持されますか?
ソースはHFS +、ターゲットはbtrfsです。
ターゲットとソースのディレクトリリストの抜粋:
$ ls -hal --time=creation
total 16K
drwxrwxr-x 1 andreas andreas 74 sep 2 23:25 .
drwx------ 1 andreas andreas 310 apr 26 17:08 ..
drwx------ 1 andreas andreas 2,3K sep 2 23:45 Library
$ ls -hal --time=creation /mnt/source
total 8,1M
drwxrwxr-x 1 andreas andreas 15 mar 28 2022 .
drwxr-x---+ 3 root root 4,0K aug 9 2022 ..
drwx------ 1 andreas andreas 95 apr 15 2019 Library
修正する
答えとコメントでサブディレクトリの日付を確認したとき、私が間違いを犯したことは間違いないという結論に達しました。私はやった。私のせい – 結果に対する期待が私のビジョンをぼかした。質問のこの部分が削除されました。
答え1
従来のUnixファイルシステムには作成時間がなく、ctimeしかありません。時間は変化時間ではなく創造時間だ。時刻の変更は、現在の時刻に変更されていない限り、オペレーティングシステムの呼び出しでは設定できません。権限を変更するか、atime または mtime を変更すると、ctime が現在時刻に設定されます。
作成時間はPOSIXの一部ではありませんが、多くのファイルシステムでそれを追加するようです。Linuxリポジトリ作成時のファイルシステムは何ですか?
ただし、これをサポートするファイルシステムでも標準化されていないため、POSIXツールで作成時間のサポートが保証されず、これをサポートするファイルシステムでも設定ができない可能性があります。場合によっては設定され、時には誤って設定されたり一貫していないように設定されている場合は、さまざまなサポートに関連するツールがいくつかあるか、そのツールが部分的なサポートのみを提供できます。
Linux固有のstatx
関数呼び出しは、atime、btime、ctime、およびmtimeをサポートします。時間作成時間が表示されます。しかし、これは単に読む時間です。 (さまざまなファイルシステムは、生成時間、btime、crtime、otimeなど、さまざまな方法で生成時間を参照します。)
詳しくは、gnu coreutils cpはutimensat
POSIX-1.2008に準拠していると主張する関数呼び出しを介して設定時間を記録します。この呼び出しは修正のみをサポートします。アルテムそして時間しかし、これを見ると、POSIXがatimeとmtimeのみをサポートしているか(ctimeは設定できません)、それともctimeとbtimeがデフォルトで変更できず、オペレーティングシステムによる変更のみを許可して適切に設定するためかはわかりません。現在のイベント時間です。
答え2
任意の値に設定できる唯一のタイムスタンプ(、、、、システムutime()
コールutimes()
を使用)は次のとおりです。utimensat()
futimens()
最後の修正別名タイムサム最後のアクセス時間アテムとも呼ばれます。
これ状態時間の変更別名ctimeと誕生/創造時間(btime / crtime)はサポートされていません。徐々に進む(任意設定)したがって、cp -a
他のソフトウェアと同様に、生成時間が生成時間と一致するファイルを生成することはできません。
ln foo bar
内部実行cp foo bar
または-l
GNUオプションを使用すると、同じタイムスタンプ(生成時間を含む)が生成されcp
ますが、この場合とは同じファイル(2つの異なる名前を含む)です。bar
foo
foo
bar