ファイルの更新日・作成日を変更するにはどうすればいいですか?

Nautilusやls -lコマンドで表示される、ファイルの更新日や作成日を変更する方法はありますか?理想的には、たくさんのファイルの日付/タイムスタンプを、ある一定の時間前または後に変更することができるコマンドを探しています(例:+8時間、-4日など)。

ファイルの所有者(またはroot)であれば、touchコマンドを使ってファイルの修正時間を変更することができます。

touch filename

デフォルトでは、このコマンドはファイルの修正時刻を現在の時刻に設定しますが、特定の日付を選択する -d フラグなど、いくつかのフラグがあります。 例えば、ファイルの修正時刻を現在の2時間前に設定するには、次のようにします。

touch -d "2 hours ago" filename

また、ファイルの修正を既存の修正時刻に合わせて行いたい場合は、次のようにします。

touch -d "$(date -R -r filename) - 2 hours" filename

多数のファイルを修正したい場合は、次のようにします。

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

find`の引数を変更することで、興味のあるファイルだけを選択することができます。 現在の時刻からの相対的なファイル修正時刻を更新したいだけなら、次のように簡略化できます。

find DIRECTORY -exec touch -d "2 hours ago" {} +

この形式は、ファイル時間相対版では、touchの引数をシェルを使って形成するので、できません。

作成時間に関しては、ほとんどのLinuxファイルシステムはこの値を記録していません。 ファイルに関連付けられた ctime がありますが、これはファイルのメタデータが最後に変更されたときを追跡します。 ファイルのパーミッションが一度も変更されていなければ、たまたま作成時刻を保持しているかもしれませんが、これは偶然の産物です。 ファイルの変更時刻を明示的に変更すると、メタデータの変更としてカウントされるため、ctimeも更新されるという副作用があります。

解説 (12)

お世話になります。 これでうまくいきました。

ターミナルで、date-editのディレクトリに移動します。 そして、次のように入力します。

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

Enterキーを押すと、最後の1回を除いて、">"が表示されます ->"done"。

注意してください。 201203101513&quotを変更すると良いでしょう。

"201203101513" = は、このディレクトリ内のすべてのファイルに適用する日付です。

私のWebページを参照してください

解説 (2)

設定で日付と時間を変更するだけで、ファイルを保存すると自動的に変更されます。

解説 (5)