元の作成/変更/読み取り時間を維持しながらファイルの名前を変更する方法はありますか? これはSolarisにあります。
前もって感謝します。
でそれを行うことはできないと思いますmv
。cp -p
ただし、 ;を使用できます。ファイルを新しい名前にコピーしてから、元のファイルを削除します。-p
フラグはタイムスタンプを保持します。
ただし、新しいiノードを取得します...そうではないものmv
他の人が提案したテーマのバリエーション:
cp -al "$oldname" "$newname"
unlink "$oldname"
$oldname と $newname が同じマウントポイント (ファイルシステム) にある限り、コピーを避ける必要があります。
あなたは運がいいです。
Solaris (ZFS を使用) は、ファイルの作成時のプロパティを実際に尊重する数少ないファイルシステムの 1 つです。
今話題: いいえ、常に保存することはできません: inode が変更され、ファイル名が変更されます。これは、inode ctime が (POSIX) 定義によって変更されることを意味します。
noatime マウント ポイント (zfs set atime=off) を実行していない限り、最終アクセス時間も変更されます。
それを変える方法はないと思います。ただし、ファイルの作成日時は一切変更しないでください。作成時間を表示するコマンドを表示するつもりでしたが、残念ながら手元に Solaris ボックスがなく、見つからないようです。あなたの最善の策は だと思いますman ls find stat
。
GL
おそらくオリジナルを使用cp -p
してから削除できます。
touch コマンドはファイルの変更時間を強制できますが、これが ZFS で機能するかどうかはわかりません。大きなファイルの名前を変更する場合、これは cp -p よりもオーバーヘッドが少なくなります。以下は bash スクリプトです。
oldFileTime=`find "$1" -maxdepth 0 -printf "%Ty%Tm%Td%TH%TM.%.2TS"`
mv "$1" "$2"
touch -t "$oldFileTime" "$2"