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

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

ファイルの変更/作成日 (Nautilus または ls -l コマンドで表示されます) を変更する方法はありますか? 理想的には、多数のファイルの日付/タイムスタンプを特定の時間だけ早めたり遅らせたりできるコマンド (例: +8 時間または -4 日など) を探しています。

答え1

ファイルの所有者 (または 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

答え2

最も簡単な方法 - アクセスと変更は同じになります:

touch -a -m -t 201512180130.09 fileName.ext

どこ:

-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

使用したい場合は、とタイムスタンプをNOW削除するだけです。-t

すべて同じであることを確認するには: stat fileName.ext

見る:男のタッチ

答え3

助けてくれてありがとう。これは私にとってはうまくいきました:

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

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

Enter キーを押すと、「>」が表示されます。ただし、最後の「完了」は除きます。

注: 「201203101513」を変更する必要があるかもしれません

「201203101513」は、このディレクトリ内のすべてのファイルに必要な日付です。

答え4

この小さなスクリプトは少なくとも私にとっては機能します:

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

関連情報