特定のディレクトリの「最後の変更」日付を一括変換するには?

特定のディレクトリの「最後の変更」日付を一括変換するには?

たとえば、私は私の時間が何時間も相殺されることを知っています(おそらく私のシステムクロックがある時点で数時間前になったからです)。この場合、特定のディレクトリにあるすべてのファイルの「最後の変更」日付をどのように一括変更しますか?

ファイルごとに変更時間を別の値に変更する必要があります。

ベストアンサー1

ファイル修正時間に相対オフセットを適用するには、とを組み合わせてtouch(1)実行できますstat(1)。 touchは相対時間をサポートしますが、ファイルの現在時刻ではなく現在時刻に基づいています。代わりに、statを使用して現在の修正時間を取得し、オフセットを適用できます。

たとえば、ファイル変更時に-2時間オフセットを適用するには、次のようにします。

touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt

stat -c %Y file.txtfile.txtエポック以降の修正時間を秒単位で取得します。バッシュを使って算術拡張、計算することができます。この場合は7200秒(2時間)を差し引いてください。タッチ-m変更変更時間を利用して-d日付を指定すると、修正時間を計算された時間に設定できます。これは@、与えられた時間がエポックの後の秒単位であることを示す時間書式指定子です。

これをシェルスクリプトに入れると、そこから呼び出すか、findfindxargsを使用して変更したいファイルを選択できます。

#!/bin/bash
for file ; do
    touch -m -d @$(( $(stat -c %Y "$file") - 7200 )) "$file"
done

これにより、引数として渡されたすべてのファイルの変更時に変更が適用されます。

おすすめ記事