ファイルタイムスタンプを3ヶ月ずつ増やす方法(ディレクトリツリーの場合)は何ですか?

ファイルタイムスタンプを3ヶ月ずつ増やす方法(ディレクトリツリーの場合)は何ですか?

touchLinuxのコマンドラインユーティリティと次の例を見ています。地図時間、アクセスまたは変更タイムスタンプを指定された時刻、現在時刻、または参照ファイルに変更する方法を理解します。

しかし、私は次のことをしたいと思います。私のファイルの相対的な期間(相対的な)には、失いたくない貴重な情報が含まれています。しかし、実際よりも数ヶ月若く見えるようにするには、フォルダ内のすべてのファイルが(再帰的に)必要です。したがって、各ファイルは自分自身を参照して時間を追加できますが、フォルダツリー内のすべてのファイルに適用できます。これを行うための良い方法はありますか?

#!/bin/bash
FILES=$(find $HIGHEST_FOLDER -type f -name *.*)
for f in $FILES
do
  touch -ram f -F 7776000 f
  # bumping access and modification timestamps by 3 months?
done

または、find -exec提案どおりに使用することをお勧めしますこれ答え? (このフォルダには多くのファイルがあります。)では、どうすればいいですか?

答え1

Linuxシステムを使用しているtouch場合、または少なくともGNUとGNUがあると仮定すると、date次のことができます(bashではzsh同じですが必須ではありませんshopt globstar)。

$ shopt globstar
$ for f in **; do 
    touch -d "$(date -d "$(stat -c '%y' "$f") +3 months")" "$f"
  done

ただし、隠しファイルは無視されます。これらも一致させるには、上記のshopt -s dotglobコマンドの前に実行します。

説明する

  • shopt -s globstar:これはglobstarbashのオプションを設定します。つまり、**すべてのファイルとゼロ以上のディレクトリとサブディレクトリが一致します。
  • shopt -s dotglob:(*および**)この名前で始まるファイルとも一致させます.
  • for f in **; do ...; done:すべてのファイルを繰り返します。とディレクトリ、別の名前で保存してください$f
  • stat -c '%y' "$f":現在のファイルまたはディレクトリの現在のタイムスタンプです。
  • date -d $(...) +3 months:与えられた文字列から3ヶ月後の日付を印刷します(この場合、文字列はコマンドのstat出力です$f)。

要約すると、上記のコマンドは現在のフォルダ(すべてのサブディレクトリを含む)にあるすべてのファイルまたはディレクトリの変更日を見つけ、その日付を今後3か月に設定します。

答え2

質問の説明を見ると、最後のファイルの変更時刻を確認して3ヶ月を追加できるツールを探しているようです。 ++一部のシェル算術評価を使用してこれを実行できますstattouchたとえば、fileタイムスタンプに90日を追加するには、次のように書くことができます。

touch -d "@$(( $(stat -c '%Y' file) + 90*24*3600 ))" file

fileその後、必要なすべてを繰り返します。

答え3

私は-execfind -a onelinerを使用します。

find $HIGHEST_FOLDER -type f -name '*.*' -exec touch -d "$(date -d "$(stat -c '%y' {}) +3 months")" {} \;

reference *.*、そうでなければ、find現在のディレクトリからファイル名を取得し、失敗します。

最後に、これを強制するには\;バックスラッシュとセミコロンを指定する必要があります。現在見つかったファイル-execです。{}find

GNUタッチに切り替えていない-Fため、例は機能しません。また、いくつかの構文の問題があります。

上記のforループでfを$ fに変更する必要があります。

touch [...] $f

それ以外の場合は、現在のディレクトリで名前付きファイルを見つけてそのf日付をx回変更します。ここでxはです$HIGHEST_FOLDER

サブシェル(ループの前)を使用する場合は、サブシェルで設定したことを$(...)確認する必要があります。$HIGHEST_FOLDER

関連情報